2

这是我的测试用例:

@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 时没有启动异步。如果有人能告诉我如何解决它会很棒,因为我被卡住了。

4

0 回答 0