如何为单元测试创建HttpServletResponse
,在这里我可以写输出流和标头(不是MockHttpServletResponse
)?
在断言块中,我希望将OutputStream
和标头与标准具httpServletResponse
进行比较。
我使用了Spring4
,java8
和EasyMock
lib。
答案 0 :(得分:2)
使用 spring-test 依赖性,您可以使用类https://www.customdomain.com
此类包含一些方法来获取结果流的内容,例如;
还有一些检查标题的方法。
有关您可以访问的课程的更多信息:
在Spring Test documentation 中,有一些关于Servlet API的有趣信息,用于测试。此外,本文档还建议在使用EasyMock等其他组件之前,先使用Spring测试组件来测试Spring类。
这些模拟对象的目标是与Spring的Web MVC一起使用 框架,通常比动态模拟更方便使用 EasyMock之类的对象或其他Servlet API模拟对象之类的对象 作为MockObjects。
首选使用EasyMock在没有Spring的情况下测试您的类和服务,并使用Spring test Runner和spring test framework工具来测试Spring组件,例如Spring MVC,Spring Security等。
答案 1 :(得分:1)
以下通过使用EasyMock
HttpServletRequest mockRequest = EasyMock.createMock(HttpServletRequest.class);
HttpServletResponse mockResponse = EasyMock.createMock(HttpServletResponse.class);
使用spring模拟类
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.mock.web.MockHttpServletRequest;
HttpServletRequest httpServletRequest = new MockHttpServletRequest();
HttpServletResponse httpServletResponse = new MockHttpServletResponse();
答案 2 :(得分:0)
使用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://stackoverflow.com/a/24593642/3511379