我正在使用 spring boot,我想通过使用MockMvc调用安全端点来断言异步副作用。
我一直在使用Awaitility,但显然在不同线程中执行时模拟的安全上下文会丢失。
我找不到传递上下文的方法,我尝试过SecurityContextHolder.setContext()
但没有用,我猜 Spring 的 MockMvc 以不同的方式存储上下文。
@Test
@WithMockUser(authorities = "admin", username = "user")
void shouldRunSideEffectAsync() throws Exception {
mockMvc.perform(post("/foo")).andExpect(status().isAccepted());
await()
.atMost(TIMEOUT)
.untilAsserted(() -> mockMvc.perform(get("/foo")).andExpect(status().isOk()));
}
GET 将返回 404 一段时间,然后在异步任务完成时返回 200。但是,由于MockUser信息丢失,这将始终返回 403 。
我该如何解决这个问题?