我有一个带有@WebFilter
的Spring Boot MVC应用程序,该应用程序向每个响应添加了自定义标头。当我实际运行该应用程序时,它运行良好,但令我感到惊讶的是,该过滤器在我的REST保证测试期间未运行。
我的考试没有花哨的东西。它基本上减少到
RestAssuredMockMvc.standaloneSetup(new MyController());
boolean headerExists = given().when().get().headers().hasHeaderWithName("my-header");
这是预期的吗?我应该做一些额外的事情来设置过滤器链吗?
最佳答案
MockMvc是用于测试控制器而不是整个Web容器的基础结构。
如果要使过滤器正常工作,则必须添加它。
这看起来像:
@Autowired
private WebApplicationContext wac;
private MockMvc mockMvc;
@Before
public void setUp() {
Collection<Filter> filterCollection = wac.getBeansOfType(Filter.class).values();
Filter[] filters = filterCollection.toArray(new Filter[filterCollection.size()]);
mockMvc = MockMvcBuilders.webAppContextSetup(wac).addFilters(filters).build();
}