跳到主要内容
版本:7.0.3

异步请求

Hunyuan 7b 中英对照 Async Requests

本节展示了如何单独使用MockMvc来测试异步请求处理。如果通过WebTestClient使用MockMvc,那么无需进行任何特殊设置即可让异步请求正常工作,因为WebTestClient会自动执行本节中描述的操作。

Servlet异步请求在Spring MVC中得到支持,其工作原理是退出Servlet容器线程,让应用程序能够异步计算响应,之后再通过异步调度在Servlet容器线程上完成处理。

在Spring MVC测试中,可以通过首先断言生成的异步值,然后手动执行异步调度,最后验证响应来测试异步请求。以下是一个针对返回DeferredResultCallable或Reactor Mono等反应式类型的控制器方法的示例测试:

// 静态导入 MockMvcRequestBuilders.* 和 MockMvcResultMatchers.*

@Test
void test() throws Exception {
MvcResult mvcResult = this.mockMvc.perform(get("/path"))
.andExpect(status().isOk()) 1
.andExpect(request().asyncStarted()) 2
.andExpect(request().asyncResult("body")) 3
.andReturn();

this.mockMvc.perform(asyncDispatch(mvcResult)) 4
.andExpect(status().isOk()) 5
.andExpect(content().string("body"));
}
  • 检查响应状态是否仍然未改变

  • 异步处理必须已经开始

  • 等待并验证异步结果

  • 由于没有运行中的容器,需要手动执行异步调度

  • 验证最终响应