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

ezykj2lf  于 2023-11-16  发布在  Spring
关注(0)|答案(3)|浏览(214)

如何为单元测试创建HttpServletResponse,在那里我可以写输出流和头(不是MockHttpServletResponse)?在Assert块中,我希望将OutputStream和头与标准器httpServletResponse进行比较。
我使用了Spring4java8EasyMock库。

wa7juj8i

wa7juj8i1#

使用spring-test依赖,您可以使用类MockHttpServletResponse
这个类包含了一些方法来获取结果流的内容,比如;

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

还有一些方法可以检查头部。
有关课程的莫尔信息,您可以访问:

Spring Test documentation中有一些关于Servlet API的有趣信息用于测试。此外,本文档建议在使用EasyMock等组件测试Spring类之前使用Spring测试组件
这些mock对象旨在与Spring的Web MVC框架一起使用,并且通常比动态mock对象(如EasyMock)或替代Servlet API mock对象(如MockObjects)更方便使用。
最好使用EasyMock来测试没有Spring的类和服务,并使用Spring test Runner和spring test framework utilities来测试Spring组件,如Spring MVC,Spring Security等。

示例代码:

MockHttpServletRequest request = new MockHttpServletRequest();
MockHttpServletResponse response = new MockHttpServletResponse();

字符串

kmbjn2e3

kmbjn2e32#

下面使用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();

eyh26e7m

eyh26e7m3#

使用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

相关问题