Как включить Async при тестировании Springboot с помощью webmvctest?

Это мой тестовый пример:

@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). Теперь я действительно зациклился на этом. Насколько я понимаю, при использовании mockmvc Async не запускается. Если бы кто-нибудь мог сказать, как это исправить, это было бы здорово, потому что я застрял.

0 ответов

Другие вопросы по тегам