我有一个带有@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();
}

10-08 12:53