1 回答
TA贡献1794条经验 获得超7个赞
您编写的测试的一些主要问题:
被测类永远不会被嘲笑(可能有一些例外),因为您想对被测类的各种方法进行单元测试的实际调用。
我们应该始终为被测类的不同方法编写单独的单元测试。在这里,我可以看到您还调用了
init
和destroy
方法,而当您要测试该doFilter
方法时不需要这些方法。当我们创建任何模拟对象时,我们使用期望来定义我们期望对模拟对象进行的调用,并在需要时让它们返回一些存根值。
现在,我已经尝试编写正确的测试来断言您要测试的两种情况:
@Test
public void testResponse_for_RequestWithoutCcid() throws IOException, ServletException {
HttpServletRequest httpServletRequest = mock(HttpServletRequest.class);
HttpServletResponse httpServletResponse = mock(HttpServletResponse.class);
FilterChain filterChain = mock(FilterChain.class);
CorrelationIdServletFilter correlationIdServletFilter = new CorrelationIdServletFilter();
expect(httpServletRequest.getHeader(CORRELATION_ID_HEADER_NAME)).andReturn(""); // Empty correlation id in the request
Capture capturedCorrelationIdRaw = newCapture();
httpServletResponse.addHeader(CORRELATION_ID_HEADER_NAME, capture(capturedCorrelationIdRaw));
expectLastCall(); // used for void methods in EasyMock framework
filterChain.doFilter(httpServletRequest, httpServletResponse);
expectLastCall();
CorrelationIdServletFilter.doFilter(httpServletRequest, httpServletResponse,
filterChain);
assertNotEmpty(capturedCorrelationIdRaw.getValue());
verify(httpServletRequest, times(1))
.getHeader(CORRELATION_ID_HEADER_NAME);
verify(httpServletResponse, times(1))
.addHeader(CORRELATION_ID_HEADER_NAME, anyString);
}
该测试需要根据所使用的实际测试框架进行更新,但我已尽力让您了解测试应该是什么样子。
添加回答
举报