Асинхронные конечные точки RestController :: Асинхронный результат для обработчика не был установлен в течение указанного времениToWait = 0 - PullRequest
1 голос
/ 05 апреля 2019

У нас есть конечные точки вида:

@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

Я считаю, что это что-то из-за тайм-аутов. У кого-нибудь была эта проблема?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...