Mockito servlet test:无法使用响应 - 它没有提交



我已经对Servlet进行了基本测试来测试其响应状态代码,但它不起作用 - 它总是0,尽管我已经在Servlet内设置了响应状态代码到200。

public class TestMyServlet extends Mockito {
@Test
public void test() throws Exception {
    HttpServletRequest request = mock(HttpServletRequest.class);
    HttpServletResponse response = mock(HttpServletResponse.class);
    when(request.getParameter("test")).thenReturn("1");
    new MyServlet().doPost(request, response);
    System.out.println(response.isCommited()); // false
    System.out.println(response.getContentType()); // null
    System.out.println(response.getStatus()); // 0
  }
}

如何让此工作?

您想以不同的方式测试。您需要验证您的输入导致预期输出。对于非嵌件结果,您将断言行为。由于您想验证是否正确设置了输出。

import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
public class MyServletTests {
    @Test
    public void testValidRequest() throws Exception {
        HttpServletRequest request = mock(HttpServletRequest.class);
        HttpServletResponse response = mock(HttpServletResponse.class);
        when(request.getParameter("test")).thenReturn("1");
        new MyServlet().doPost(request, response);
        // ensure that the request was used as expected
        verify(request).getParameter("test");
        // ensure that the response was setup as expected based on the
        //  mocked inputs
        verify(response).setContentType("text/html");
        verify(response).setStatus(200);
    }
 }

如果您期望给定某些输入不触摸某些东西,则应考虑使用verify(response, never()).shouldNotBeCalledButSometimesIs()验证该行为(以验证条件在控制条件时被称为/设置而不是)。

您正在嘲笑httpservletresponse。因此,由于这是一个模拟,getStatus()只会返回非零值,直到您告诉模拟在调用getStatus()时返回其他内容。它不会将传递的值返回到setStatus(),因为这是一个模拟,而无需做任何事情。

您可以使用"智能"模拟httpservletresponse,就像春季提供的那样。

相关内容

  • 没有找到相关文章