Как включить Asyn c при тестировании Springboot с помощью webmvctest? - PullRequest
0 голосов
/ 26 мая 2020

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

@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. Если бы кто-нибудь мог сказать, как это исправить, это было бы здорово, потому что я застрял.

...