如何在Spring中为单元测试创建HttpServletResponse?

16

如何为单元测试创建HttpServletResponse,以便我可以编写输出流和标题(不使用MockHttpServletResponse)?在断言块中,我希望将OutputStream和标题与标准httpServletResponse进行比较。

我使用了Spring4java8EasyMock库。

3个回答

17
使用spring-test依赖项,您可以使用MockHttpServletResponse类。
该类包含获取结果流内容的方法,例如:
  • byte[] getContentAsByteArray()
  • String getContentAsString()
还有一些方法可以检查头信息。
有关该类的更多信息,请访问: Spring Test documentation中,有关于测试Servlet API的一些有趣信息。此文档还建议在测试Spring类之前使用Spring测试组件,而不是其他组件,如EasyMock。
这些模拟对象针对Spring的Web MVC框架使用,通常比EasyMock或其他Servlet API模拟对象(如MockObjects)更方便使用。
最好使用EasyMock来测试您的类和服务,而不使用Spring,并使用Spring测试运行器和Spring测试框架工具来测试Spring组件,如Spring MVC,Spring Security等。
示例代码:
MockHttpServletRequest request = new MockHttpServletRequest();
MockHttpServletResponse response = new MockHttpServletResponse();

太棒了!谢谢你。 - Elias Nicolas

9
通过使用EasyMock,可以实现以下方法:
 HttpServletRequest mockRequest = EasyMock.createMock(HttpServletRequest.class);
 HttpServletResponse mockResponse = EasyMock.createMock(HttpServletResponse.class);

Using spring mock class

import  org.springframework.mock.web.MockHttpServletResponse;
import  org.springframework.mock.web.MockHttpServletRequest;

HttpServletRequest httpServletRequest = new MockHttpServletRequest();
HttpServletResponse httpServletResponse = new MockHttpServletResponse();

2
使用powermock-api-mockito,可以模拟HttpServletResponse并验证响应头。
来自servlet方法的Java代码片段:
response.setHeader("Cache-Control", "max-age=123456789");
response.setHeader("Content-Type", "video/mp4");
response.setHeader("Content-Disposition", "inline");
response.setHeader("Accept-Ranges","bytes");

单元测试:

import static org.mockito.Mockito.mock
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

final HttpServletResponse response = mock(HttpServletResponse.class);
final HttpServletRequest request = mock(HttpServletRequest.class);
servlet.doGet();
verify(response).setHeader("Cache-Control", "max-age=123456789");
verify(response).setHeader("Content-Type", "video/mp4");
verify(response).setHeader("Content-Disposition", "inline");
verify(response).setHeader("Accept-Ranges","bytes");

verify(response).setHeader("Content-Length","421854");      
verify(response, times(1)).setHeader("Accept-Ranges","bytes");

如果想要存根化OutputStream,您可以使用以下代码:

when(response.getOutputStream()).thenReturn(mock(ServletOutputStream.class));

此答案中还有更多有用的信息,请参见https://dev59.com/IWAf5IYBdhLWcg3weyzZ#24593642


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接