Я написал интеграционный тест для следующего потока, используя RabbitMock (нашел его на github, и он кажется действительно классным):
Сообщение добавляется в очередь входящих сообщений -> список входящих сообщений поднимаетсясообщение -> обрабатывает его -> помещает новое исходящее сообщение в новую очередь. Outgoing-message-queue -> (только для тестов) записывает список для этой исходящей очереди в src / test / resources.
Все работает (с одним важным затруднением - прерывистым тайм-аутом), и я делаю утверждения, как показано ниже:
List<OutgoingData> receivedMessages = new ArrayList<>();
assertTimeoutPreemptively(ofMillis(15000L), () -> {
while (receivedMessages.isEmpty()) {
OutgoingData data =
receiver.getOutgoingData();
if(data != null){
receivedMessages.add(data);
}
}
}
);
assertThat(receivedMessages.get(0)).isNotNull();
assertThat
(receivedMessages.get(0).getRecipient())
.isEqualTo("enabled@localhost");
Тайм-аут в этом тесте является реальной проблемой, с которой я сталкиваюсь.
- Из-за тайм-аута тесты становятся медленными.
- Если я удаляю тайм-аут, тесты застревают в Дженкинсе и должны быть принудительно убиты.
- Время от времени этого таймаута в 15000 миллисекунд также недостаточно, и тесты не проходят.
Мне было интересно, есть ли лучший способ справиться с такой ситуацией в интеграционном тесте.
Ждем ваших отзывов.
Большое спасибо, Banyanbat