首页 > 解决方案 > 我可以使用 REST Assured 测试 servlet 过滤器吗?

问题描述

我有一个 Spring Boot MVC 应用程序,@WebFilter它为每个响应添加了一个自定义标头。当我实际运行应用程序时它工作正常,但我有点惊讶过滤器在我的 REST Assured 测试期间没有运行。

我的测试没有什么花哨的;它基本上减少到

RestAssuredMockMvc.standaloneSetup(new MyController());
boolean headerExists = given().when().get().headers().hasHeaderWithName("my-header");

这是预期的吗?我应该做一些额外的事情来设置过滤器链吗?

标签: javaservlet-filtersrest-assured

解决方案


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();
}

推荐阅读