Выбор ответа Middle Тестирование в Spring обновлено
Ожидание асинхронного результата
Вопрос
Как правильно дождаться результата асинхронной обработки (например, сообщения из Kafka) в интеграционном тесте?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Ждать условие с таймаутом через Awaitility. await().atMost(Duration.ofSeconds(10)).untilAsserted(...) проверяет условие с интервалом и завершается, как только оно выполнено: тест быстрый, когда всё хорошо, и не хрупкий на медленном CI.
Варианты ответа
Thread.sleep(5000)- Запускать тест несколько раз, пока не пройдёт
- Ждать условие с таймаутом через Awaitilityправильный ответ
- Сделать обработку синхронной в продакшен-коде
Разбор
await().atMost(Duration.ofSeconds(10)).untilAsserted(...) проверяет условие с интервалом и завершается, как только оно выполнено: тест быстрый, когда всё хорошо, и не хрупкий на медленном CI. Фиксированный sleep либо зря ждёт, либо слишком короткий. Перезапуски прячут проблему, а менять прод-код ради теста неправильно.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.