【发布时间】:2019-06-26 17:18:46
【问题描述】:
我正在尝试使用 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);
}
}
这是使用FilterRegistrationBean在SpringBootApplication中注册的
@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的状态值。
我错过了什么吗?
【问题讨论】:
标签: spring-boot spring-security mockmvc