У меня есть фильтр в Spring, который выполняет некоторую логику в зависимости от типа метода входящего запроса.Ниже приведен код фильтра:
public class TestFilter extends GenericFilterBean {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;
if (HttpMethod.GET.equals(httpRequest.getMethod())) {
// do something
} else {
// do something else
}
chain.doFilter(request, httpResponse);
}
}
. В приведенном выше коде я пытаюсь установить заголовок в моем ответе под названием GETHEADER
всякий раз, когда метод запроса равен GET
, тогда как этого не происходит в POST
.
И я пытаюсь протестировать его, используя приведенный ниже код теста:
@Mock
HttpServletResponse response;
@Mock
HttpServletRequest request;
@Mock
FilterChain chain;
@Autowired
TestFilter testFilter;
@Test
public void testGetRequest() throws Exception {
when(request.getMethod()).thenReturn(HttpMethod.GET.toString());
testFilter.doFilter(request, response, chain);
Assert.assertNotNull(response.getHeader("GETHEADER"));
}
В своем покрытии кода я вижу только выполнение остальной части, но не части if,Разве это не возвращает значение, которое я пытаюсь предоставить, или есть какая-то проблема с тем, как я возвращаю?
ОБНОВЛЕНИЕ : пробовал, как показано ниже:
код: if (HttpMethod.GET.toString().equals(httpRequest.getMethod()))
контрольный пример: when(request.getMethod()).thenReturn(HttpMethod.GET.toString())
также
код: if ("GET".toString().equals(httpRequest.getMethod()))
контрольный пример: when(request.getMethod()).thenReturn("GET")