У нас есть конечные точки вида:
@GetMapping("/myurl")
public Callable<String> getARandomString(@RequestParam int a) {
Приложение настроено только с одним потоком (поэтому мы используем Callable
s для обработки этого). Однако, чтобы создать тесты для этого, мы делаем настройку следующим образом:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {MyApplication.class, MyController.class})
@ActiveProfiles("test")
public class MyControllerTest {
@MockBean
private MyService myService;
@Autowired
private WebApplicationContext wac;
private MockMvc mockMvc;
@Before
public void before() {
MockitoAnnotations.initMocks(this);
mockMvc = MockMvcBuilders.webAppContextSetup(wac)
.build();
when(myServices.isOk()).thenReturn(true);
}
@Test
public void given_when_then() throws Exception {
MvcResult mvcResult = mockMvc.perform(get("/myurl")
.param("a", 1))
.andExpect(request().asyncStarted())
.andReturn();
mvcResult.getAsyncResult();
mockMvc
.perform(asyncDispatch(mvcResult))
.andExpect(status().isOk());
}
1 тест на время работает отлично. Напротив, при наличии более чем 1 тест выдается исключение, как показано ниже:
java.lang.IllegalStateException: Async result for handler [public java.util.concurrent.Callable<String> com.antmordel.MyController. getARandomString(int)] was not set during the specified timeToWait=0
Я считаю, что это что-то из-за тайм-аутов. У кого-нибудь была эта проблема?