Я пытаюсь протестировать пользовательский фильтр, используя MockMvc, и он всегда возвращает статус 404
вместо фактического статуса, возвращаемого классом фильтра.
Класс фильтра выглядит следующим образом:
public class CustomFilter extends GenericFilterBean {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
// some logic
chain.doFilter(servletRequest, servletResponse);
}
}
Это зарегистрировано в SpringBootApplication
с использованием FilterRegistrationBean
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
try {
ConfigurableApplicationContext ctx = SpringApplication.run(MyApplication.class, args);
} catch (Throwable e) {
}
@Bean
public FilterRegistrationBean<CustomFilter> customFilter() {
FilterRegistrationBean<CustomFilter> filterRegistration = new FilterRegistrationBean<>();
filterRegistration.setFilter(new CustomFilter());
filterRegistration.addUrlPatterns("/test/*");
return filterRegistration;
}
}
Тест для этого записывается следующим образом:
@RunWith(SpringRunner.class)
@SpringBootTest(CustomFilter.class)
@EnableAutoConfiguration
@WebAppConfiguration
public class CustomFilterTest {
@Autowired
private CustomFilter filter;
@Autowired
private WebApplicationContext context;
private MockMvc mvc;
@Before
public void setup() {
this.mvc = MockMvcBuilders.webAppContextSetup(context)
.addFilters(filter)
.build();
}
@Test
public void testCustomFilter() throws Throwable {
MockHttpServletRequestBuilder request = MockMvcRequestBuilders
.request(HttpMethod.POST, "/resource/abc")
.header("SomeHeader", "xxx")
.content("{}");
MockHttpServletResponse response = mvc.perform(request).andReturn().getResponse();
assertEquals(response.getStatus(), HttpServletResponse.SC_CONTINUE);
}
}
Утверждение всегда возвращает значение состояния 404.
Я что-то здесь упускаю?