Это мой тестовый пример:
@Test
public void sampleTestCase(int parm1, int parm2, Integer expectedReturnedMessageCode, String expectedReturnedparm2, Integer expectedReturnedparm1) throws Exception {
MvcResult result = mockMvc
.perform( MockMvcRequestBuilders
.post("/sampleapi")
.content(asJsonString(new SampleRequestClass(parm1, parm2)))
.contentType(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_JSON))
.andDo(print())
.andReturn();
mockMvc.perform(asyncDispatch(result))
.andExpect(status().isOk())
.andDo(print())
.andExpect(jsonPath("message_code").value(expectedReturnedMessageCode))
.andExpect(jsonPath("data.parm1").value(expectedReturnedparm1))
.andExpect(jsonPath("data.parm2").value(expectedReturnedparm2));
}
Этот «sampleapi» возвращает объект DeferredResult. Когда я запускаю этот тестовый пример, я получаю следующую ошибку.
java.lang.IllegalStateException: The asyncDispatch CountDownLatch was not set by the TestDispatcherServlet.
at org.springframework.util.Assert.state(Assert.java:73)
at org.springframework.test.web.servlet.DefaultMvcResult.awaitAsyncDispatch(DefaultMvcResult.java:158)
at org.springframework.test.web.servlet.DefaultMvcResult.getAsyncResult(DefaultMvcResult.java:145)
at org.springframework.test.web.servlet.DefaultMvcResult.getAsyncResult(DefaultMvcResult.java:136)
at org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch(MockMvcRequestBuilders.java:269)
Я относительно новичок в Springboot, и ранее этот случай блока был написан с использованием @SpringBootTest, и этот случай выполняется успешно, позже я обнаружил, что могу запускать тестовые примеры, фактически не загружая все, поэтому я переключился на @ WebMvcTest. Я исправил все остальные зависимости (@MockBean). Теперь я действительно зациклился на этом. Насколько я понимаю, эта проблема заключается в том, что Asyn c не запускается при использовании mock mvc. Если бы кто-нибудь мог сказать, как это исправить, это было бы здорово, потому что я застрял.