Spring异步方法集成测试失败

时间:2018-03-31 22:26:06

标签: spring-boot spring-test spring-restcontroller spring-rest

我为异步休息控制器方法创建了一个集成测试。看起来像:

   @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);
}

你知道可能出现什么问题吗?

1 个答案:

答案 0 :(得分:0)

所以,

我再次阅读文档,然后我解决了这个问题。如果您想使用方法request().asyncStarted(),则必须包含回复CallableDeferredResult

  
      
  • 断言异步处理是否开始,通常是作为   返回{@link Callable}或{@link的控制器方法的结果   DeferredResult}。
  •