1 回答

TA貢獻1794條經驗 獲得超8個贊
您編寫的測試的一些主要問題:
被測類永遠不會被嘲笑(可能有一些例外),因為您想對被測類的各種方法進行單元測試的實際調用。
我們應該始終為被測類的不同方法編寫單獨的單元測試。在這里,我可以看到您還調用了
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);
}
該測試需要根據所使用的實際測試框架進行更新,但我已盡力讓您了解測試應該是什么樣子。
添加回答
舉報