我的POST请求是异步的,因为我使用的是spring数据rest。现在,我在尝试为POST请求编写测试用例时遇到了问题。异常为"Async started expected:true but was:false">
我读过很多文章,他们都说如何为异步GET方法而不是POST方法做测试用例。我正在尝试实现本文中为GET方法建议的逻辑,但收到了一个异常。
private final MediaType contentType = new
MediaType(MediaType.APPLICATION_JSON.getType(),
MediaType.APPLICATION_JSON.getSubtype(), Charset.forName("utf8"));
private MockMvc mockMvc;
@Autowired
private WebApplicationContext webApplicationContext;
@Test
public void addProgramToTestDefaultValuesUsingAsync() throws Exception {
UserProgram request = getProgramRequest();
MvcResult result = mockMvc.perform(post("/programs")
.content(TestUtils.asJsonString(request))
.contentType(contentType))
.andDo(print())
.andExpect(request().asyncStarted())
.andReturn();
mockMvc.perform(asyncDispatch(result))
.andExpect(status().isCreated())
.andExpect(header().string(CONTENT_TYPE, APPLICATION_JSON_VALUE))
.andExpect(jsonPath("programRetries").value("3"));
}
我希望它等到调用完成后,再根据异常值检查响应。但调用在request().asyncStarted()处失败,并返回"Async started expectd:true But was:false"。我读过很多文章,但没有一篇涉及这个问题。感谢您的帮助。
为了构建我的测试用例,我使用了以下文章:
https://niels.nu/blog/2016/spring-async-rest.html
http://callistaenterprise.se/blogg/teknik/2014/06/23/testing-non-blocking-rest-services-with-spring-mvc-and-spring-boot/
我也有同样的问题。尝试以下内容,看看它是否适用于您,如果您正在尝试测试控制器api:
mockMvc = MockMvcBuilders.standaloneSetup(new UserApi(new ServiceUser()).setAsyncRequestTimeout(1000).build();
希望能有所帮助。