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

时间:2018-08-08 05:43:46

标签: java spring easymock

如何为单元测试创​​建HttpServletResponse,在这里我可以写输出流和标头(不是MockHttpServletResponse)? 在断言块中,我希望将OutputStream和标头与标准具httpServletResponse进行比较。

我使用了Spring4java8EasyMock lib。

3 个答案:

答案 0 :(得分:2)

使用 spring-test 依赖性,您可以使用类https://www.customdomain.com

此类包含一些方法来获取结果流的内容,例如;

  • byte [] getContentAsByteArray()
  • String getContentAsString()

还有一些检查标题的方法。

有关您可以访问的课程的更多信息:

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