Тестирование Spring asyncResult () и jsonPath () вместе

Я использую релаксирующий URL, чтобы запустить длительный бэкэнд-процесс (обычно он выполняется по расписанию cron, но мы хотим иметь возможность запускать его вручную).

Код ниже работает, и я вижу результат в браузере, когда я тестирую вручную.

@ResponseBody
@RequestMapping(value = "/trigger/{jobName}", method = RequestMethod.GET)
public Callable<TriggerResult> triggerJob(@PathVariable final String jobName) {

    return new Callable<TriggerResult>() {
        @Override
        public TriggerResult call() throws Exception {
            // Code goes here to locate relevant job and kick it off, waiting for result
            String message = <result from my job>;
            return new TriggerResult(SUCCESS, message);
        }
    };
}

Когда я проверяю это безCallable Я использовал код ниже, и все это работает (я изменил ожидаемое сообщение об ошибке, чтобы упростить публикацию).

mockMvc.perform(get("/trigger/job/xyz"))
    .andExpect(status().isOk())
    .andDo(print())
    .andExpect(jsonPath("status").value("SUCCESS"))
    .andExpect(jsonPath("message").value("A meaningful message appears"));

Когда я добавилCallable Однако это не работает. Я также попробовал ниже, но это не сработало. У кого-нибудь еще был успех?

mockMvc.perform(get("/trigger/job/xyz"))
    .andExpect(status().isOk())
    .andDo(print())
    .andExpect(request().asyncResult(jsonPath("status").value("SUCCESS")))
    .andExpect(request().asyncResult(jsonPath("message").value("A meaningful message appears")));

Ниже приведена соответствующая часть из моей печати (). Похоже, mockMvc не может правильно распутать Json в этом случае (даже если он работает в моем браузере)? Когда я делаю это безCallable Я вижу полный JSON.

MockHttpServletRequest:
     HTTP Method = GET
     Request URI = /trigger/job/xyz
      Parameters = {}
         Headers = {}

         Handler:
            Type = foo.bar.web.controller.TriggerJobController
          Method = public java.util.concurrent.Callable<foo.bar.myproject.web.model.TriggerResult> foo.bar.myproject.web.controller.TriggerJobController.triggerJob(java.lang.String)

           Async:
 Was async started = true
      Async result = foo.bar.myproject.web.model.TriggerResult@67aa1e71


Resolved Exception:
            Type = null

    ModelAndView:
       View name = null
            View = null
           Model = null

        FlashMap:

MockHttpServletResponse:
          Status = 200
   Error message = null
         Headers = {}
    Content type = null
            Body = 
   Forwarded URL = null
  Redirected URL = null
         Cookies = []

Ответы на вопрос(3)

Ваш ответ на вопрос