| 
         此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Framework 6.1.10!  | 
    
| 
         此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Framework 6.1.10!  | 
    
本部分介绍如何单独使用 MockMvc 来测试异步请求处理。
如果通过 WebTestClient 使用 MockMvc,则无需执行任何特殊操作即可
异步请求的工作方式是自动执行所描述的操作
在本节中。WebTestClient
Servlet 异步请求,在 Spring MVC 中受支持, 通过退出 Servlet 容器线程并允许应用程序进行计算来工作 异步响应,然后进行异步调度以完成 在 Servlet 容器线程上进行处理。
在 Spring MVC 测试中,可以通过断言生成的异步值来测试异步请求
首先,手动执行异步调度,最后验证响应。
下面是返回 、 、 的控制器方法的示例测试
或反应型,如反应器:DeferredResultCallableMono
- 
Java
 - 
Kotlin
 
// static import of MockMvcRequestBuilders.* and 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"));
   }
| 1 | 检查响应状态仍未更改 | 
| 2 | 异步处理必须已启动 | 
| 3 | 等待并断言异步结果 | 
| 4 | 手动执行 ASYNC 调度(因为没有正在运行的容器) | 
| 5 | 验证最终响应 | 
@Test
fun test() {
	var mvcResult = mockMvc.get("/path").andExpect {
		status { isOk() } (1)
		request { asyncStarted() } (2)
		// TODO Remove unused generic parameter
		request { asyncResult<Nothing>("body") } (3)
	}.andReturn()
	mockMvc.perform(asyncDispatch(mvcResult)) (4)
			.andExpect {
				status { isOk() } (5)
				content().string("body")
			}
}
| 1 | 检查响应状态仍未更改 | 
| 2 | 异步处理必须已启动 | 
| 3 | 等待并断言异步结果 | 
| 4 | 手动执行 ASYNC 调度(因为没有正在运行的容器) | 
| 5 | 验证最终响应 | 
| 1 | 检查响应状态仍未更改 | 
| 2 | 异步处理必须已启动 | 
| 3 | 等待并断言异步结果 | 
| 4 | 手动执行 ASYNC 调度(因为没有正在运行的容器) | 
| 5 | 验证最终响应 | 
| 1 | 检查响应状态仍未更改 | 
| 2 | 异步处理必须已启动 | 
| 3 | 等待并断言异步结果 | 
| 4 | 手动执行 ASYNC 调度(因为没有正在运行的容器) | 
| 5 | 验证最终响应 |