【发布时间】:2018-08-08 05:43:45
【问题描述】:
如何为单元测试创建HttpServletResponse,我可以在其中编写输出流和标头(不是MockHttpServletResponse)?
在断言块中,我希望将OutputStream 和标头与标准具httpServletResponse 进行比较。
我使用了Spring4、java8 和EasyMock 库。
【问题讨论】:
如何为单元测试创建HttpServletResponse,我可以在其中编写输出流和标头(不是MockHttpServletResponse)?
在断言块中,我希望将OutputStream 和标头与标准具httpServletResponse 进行比较。
我使用了Spring4、java8 和EasyMock 库。
【问题讨论】:
使用 spring-test 依赖,您可以使用 MockHttpServletResponse
此类包含获取结果流内容的方法,例如;
还有一些检查标题的方法。
有关课程的更多信息,您可以访问:
在Spring Test documentation 中有一些关于用于测试的 Servlet API 的有趣信息。此外,本文档建议在使用 EasyMock 等其他测试组件之前使用 Spring 测试组件来测试 Spring 类
这些模拟对象的目标是与 Spring 的 Web MVC 一起使用 框架,通常比动态模拟更方便使用 对象,例如 EasyMock 或替代 Servlet API 模拟对象,例如 作为 MockObjects。
最好使用 EasyMock 在没有 Spring 的情况下测试您的类和服务,并使用 Spring test Runner 和 spring 测试框架实用程序来测试 Spring MVC、Spring Security 等 Spring 组件...
【讨论】:
以下方式使用 EasyMock
HttpServletRequest mockRequest = EasyMock.createMock(HttpServletRequest.class);
HttpServletResponse mockResponse = EasyMock.createMock(HttpServletResponse.class);
使用spring mock类
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.mock.web.MockHttpServletRequest;
HttpServletRequest httpServletRequest = new MockHttpServletRequest();
HttpServletResponse httpServletResponse = new MockHttpServletResponse();
【讨论】:
使用 powermock-api-mockito,可以模拟 HttpServletResponse 并验证响应标头。
来自servlet方法的Java代码sn-p:
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
【讨论】: