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

问题描述 投票:2回答:3

如何在Spring中创建HttpServletResponse?HttpServletResponse 用于单元测试,我可以写输出流和头文件(而非 MockHttpServletResponse)?在断言块中,我希望比较一下 OutputStream 和带Etalon的封头 httpServletResponse.

我曾经 Spring4, java8EasyMock lib.

java spring easymock
3个回答
3
投票

使用 春试 依赖关系,你可以使用类 MockHttpServletResponse

这个类包含了一些方法来获取结果流的内容,比如。

  • byte[] getContentAsByteArray()
  • 字符串getContentAsString()

而且还有一些方法可以检查头文件。

关于该类的更多信息,你可以访问。

Spring测试文档 有一些关于Servlet API测试的有趣信息。另外,该文档建议在使用Spring测试组件之前,先使用EasyMock等测试Spring类。

这些模拟对象是针对Spring的Web MVC框架使用的,通常比EasyMock等动态模拟对象或MockObjects等Servlet API模拟对象使用起来更方便。

最好使用EasyMock来测试你的类和服务,而不用Spring,使用Spring测试Runner和Spring测试框架工具来测试Spring组件,如Spring MVC、Spring Security等。


1
投票

下面是使用EasyMock的方法

 HttpServletRequest mockRequest = EasyMock.createMock(HttpServletRequest.class);
 HttpServletResponse mockResponse = EasyMock.createMock(HttpServletResponse.class);

利用春季模拟课堂

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

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

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");

对于输出流的存根,你可以使用ewhen(response.getOutputStream()).thenReturn(mock(ServletOutputStream.class))。

在这个答案中,有更多有用的信息https:/stackoverflow.coma245936423511379。

© www.soinside.com 2019 - 2024. All rights reserved.