我为异步休息控制器方法创建了一个集成测试。看起来像:
@Test
public void shouldHandleRequestsAsynchronously() throws Exception {
MvcResult mvcResult = this.mockMvc.perform(get("/api/reports/daily?startDate=2004-04-13&endDate=2005-04-13"))
.andExpect(request().asyncStarted())
.andReturn();
this.mockMvc.perform(asyncDispatch(mvcResult))
.andExpect(status().isOk())
.andExpect(jsonPath("$[0].totalDistance", equalTo(100)))
.andExpect(jsonPath("$[0].totalPrice", equalTo(100.7)));
}
主要问题是,我一直收到断言错误:
java.lang.AssertionError: Async started
Expected :true
Actual :false
与.andExpect(request().asyncStarted()
一致。说实话,我不知道出了什么问题。
我的休息控制器方法是:
@GetMapping(value = "/daily")
public ResponseEntity<List<DailyReport>> getDailyReports(
@PathParam("startDate") @DateTimeFormat(pattern = "YYYY-MM-DD") Date startDate,
@PathParam("endDate") @DateTimeFormat(pattern = "YYYY-MM-DD") Date endDate) throws InterruptedException, ExecutionException {
return new ResponseEntity<>(reportService.findReports(startDate, endDate).get(), HttpStatus.OK);
}
你知道可能出现什么问题吗?
答案 0 :(得分:0)
所以,
我再次阅读文档,然后我解决了这个问题。如果您想使用方法request().asyncStarted()
,则必须包含回复Callable
或DeferredResult
。
- 断言异步处理是否开始,通常是作为 返回{@link Callable}或{@link的控制器方法的结果 DeferredResult}。