创建对象MockHttpServletResponse进行单元测试时出错

  1. 我试图使用sprint-test和模仿对象编写Servlet的单元测试

  2. 我的Maven依赖是:

    <dependency>

    org.springframework

    spring-test

    4.0.3.RELEASE

我只想测试Java servlet,例如以下有关 书:

package sample;

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class LoginServlet extends HttpServlet {

private boolean isValid;

/**

*

*/

private static final long serialVersionUID = 2473252741884321641L;

@Override

public void init() throws ServletException {

super.init();

}

@Override

public void doPost(HttpServletRequest req, HttpServletResponse resp)

throws IOException {

String user = req.getParameter("j_username");

String pass = req.getParameter("j_password");

if (isValidLogin(user, pass)) {

resp.sendRedirect("/frontpage");

req.getSession().setAttribute("username", user);

} else {

resp.sendRedirect("/invalidlogin");

}

}

private boolean isValidLogin(String user, String pass) {

return isValid;

}

public void setValid(boolean isValid) {

this.isValid = isValid;

}

}

我的代码是:

    package sample;

import static org.junit.Assert.assertEquals;

import org.junit.Test;

import org.springframework.mock.web.MockHttpServletRequest;

import org.springframework.mock.web.MockHttpServletResponse;

public class SprintTestProb {

@Test

public void wrongPasswordShouldRedirectToErrorPage() throws Exception {

MockHttpServletRequest request = new MockHttpServletRequest();

MockHttpServletResponse response = new MockHttpServletResponse();

request.addParameter("j_username", "gyanu");

request.addParameter("j_password", "wrongpassword");

LoginServlet login = new LoginServlet();

login.setValid(false);

login.doPost(request, response);

assertEquals("/invalidlogin", response.getRedirectedUrl());

}

}

我在 行上出错

如下:

java.lang.ExceptionInInitializerError

at org.springframework.mock.web.MockHttpServletResponse.<init>(MockHttpServletResponse.java:76)

at sample.SprintTestProb.wrongPasswordShouldRedirectToErrorPage(SprintTestProb.java:14)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:606)

at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)

at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)

at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)

at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)

at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)

at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)

at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)

at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)

at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)

at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)

at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)

at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)

at org.junit.runners.ParentRunner.run(ParentRunner.java:309)

at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)

at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

Caused by: java.util.MissingResourceException: Can't find bundle for base name javax.servlet.LocalStrings, locale en_US

at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1499)

at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1322)

at java.util.ResourceBundle.getBundle(ResourceBundle.java:721)

at javax.servlet.ServletOutputStream.<clinit>(ServletOutputStream.java:87)

... 25 more

回答:

我需要使用javax.selvlet-api替换javaee-api的依赖项,如下所示:

<dependency>

<groupId>javax.servlet</groupId>

<artifactId>javax.servlet-api</artifactId>

<version>3.1.0</version>

</dependency>

以上是 创建对象MockHttpServletResponse进行单元测试时出错 的全部内容, 来源链接: utcz.com/qa/429911.html

回到顶部