java - 我可以使用 REST Assured 测试 servlet 过滤器吗?
问题描述
我有一个 Spring Boot MVC 应用程序,@WebFilter
它为每个响应添加了一个自定义标头。当我实际运行应用程序时它工作正常,但我有点惊讶过滤器在我的 REST Assured 测试期间没有运行。
我的测试没有什么花哨的;它基本上减少到
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();
}
推荐阅读
- reactjs - 与 Nx React 项目的集成更少
- python - 正则表达式,在程序中找到最后一个“end”以替换为另一个单词
- mysql - Docker Swarm 放置约束不起作用
- c++ - 可以做命名空间范围 = std::ranges;
- javascript - useState 不会立即更新状态
- angularjs - Angularjs 绑定更新了 ng-repeat 中的所有选择
- flutter - 在 TextFormField Flutter 中加载 svg
- javascript - 反应自定义 Hook 中未定义 useHistory
- python - 如何从点列表中找到最近的坐标?
- c - c语言链表实现队列