Тестирую отправку сообщений с помощью JavaMailSender
, который запускается из ExecutorService
с помощью submit
, все работает отлично, но в тестах GreenMail
не получает сообщения, так как заканчивает работу слишком быстро. До этого использовала execute+awaitTermination
- все проходило на ура. setServerStartUpTimeout, setServerConnectionTimeout
на любое время для GreenMail
не помогают. Как можно это решить? или есть другие библиотеки чтобы имитировать SMTP server
?
Вот код, то что в отправителе
notifications.forEach(notification -> {
Supplier<Boolean> sendingTask = () -> sendNotification(notification);
CompletableFuture<Boolean> future = CompletableFuture.supplyAsync(sendingTask, executorService);
future.whenComplete((result, ex) -> {
if (result) {
log.info("Successfull");
}
if (ex != null) {
log.error("Error by sending", ex);
}
});
});
Это в тесте
def setup() {
ServerSetup serverSetup = ServerSetupTest.SMTP
serverSetup.setServerStartupTimeout(50000)
serverSetup.setWriteTimeout(50000)
serverSetup.setReadTimeout(50000)
serverSetup.setConnectionTimeout(50000)
testSmtp = new GreenMail(serverSetup)
testSmtp.start()
javaMailSender = new JavaMailSenderImpl()
javaMailSender.setHost("127.0.0.1")
javaMailSender.setPort(3025)
}
и в самом тестовом методе
def messages = testSmtp.getReceivedMessages()
- показывает пустой лист(
так как вы запускаете тестовые запросы асинхронно, то основной поток, запустивший сервер завершается не дожидаясь асинхронных задач. Ожидание запущенных задач можно реализовать разными способами:
CountDownLatch
Thread.sleep
и проверять завершение задач вызывая CompletableFuture.isDone()
другие предполагаемые (т.к. полного кода теста нет) проблемы:
Как выше писал Ramiz надо действительно заставить фейк-сервер ждать прихода сообщений. Использовала библиотеку awailitility
, интегрированную с Groovy
.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Цикл: for (j = 2; j < i; j++), в чем заключается j<iКак это понять? Откуда мы придумали j?
Как в javascript можно отследить изменение свойства объекта и при изменении вызвать callBack? Например: objprop = true; При изменении obj