Прежде всего, быстрый поиск в Google показывает этот вопрос .Поскольку я не на 100% говорю о Spring, я не предлагаю рассматривать это как дублирование.
Теперь я предоставлю несколько дополнительных приемов, если предположить, что мы говорим оМетоды Spring Async (интеграционный тест, вероятно, выполняется с SpringRunner
)
Чтобы начать с основ, в двух словах, методы @Async
выполняются в другом пуле потоков.Технически это делается путем генерации прокси во время выполнения.Таким образом, есть много методов (вне моей головы, поскольку я действительно не использовал их), которые могли бы помочь:
Вариант 1
Отключить поддержку асинхронного тестирования,Это может быть сделано путем создания некоторого условия в вашем пользовательском классе конфигурации, который включит асинхронную поддержку.Примерно так:
@Configuration
@EnableAsync
@ConditionalOnProperty(name = "async.support.enabled", havingValue = true)
public class MyAsyncEnablerConfiguration {
}
Для тестов создайте переменную false
Опция 2
Если это метод на контроллере и выиспользовать тестирование mockMvc (опять же, только мои предположения, я не знаю, где на самом деле код), вы можете воспользоваться asyncDispatch
методом, который будет заботиться об асинхронных запросах.
Это выглядит так:
mockMvc.perform(asyncDispatch(mvcResult)) // <-- Note this call
.andExpect(status().isOk())
...
Полный пример можно найти Здесь
Опция 3
Обратите внимание, что тип возвращаемого значения @Async
метод не должен быть void
.Это может быть Future
или даже AsyncResult
пружины.Так что если это будущее - вы можете позвонить future.get()
в коде и получить результат.
Чтобы прочитать о типах возвращаемых результатов, проверьте Это руководство