Тестирование почтового сервера в тестах clojure - PullRequest
0 голосов
/ 02 сентября 2018

Мне нужно протестировать наш почтовый сервер в проекте clojure. Чтобы сделать это, я подумал, что открою макет сервера и отправлю электронные письма, используя этот макет сервера и проверим, отправляются ли они. Для этого я нашел, например, этот сервер .

Чтобы иметь возможность выполнить

lein test

и каждый тест проверен, мне нужно запустить SMTP-сервер один раз перед каждым тестом и один раз в конце. Я также могу запустить сервер в приборе и выйти из него после каждого теста. Поскольку я провожу около 100 тестов, нет смысла всегда запускать и выключать сервер.

Мои подходы, о которых я думал, следующие:

1 - я пишу bash-скрипт, который запускает (макетный) почтовый сервер, запускает lein test, затем выключает сервер. (Здесь я теряю легкость выполнения теста lein в IDE)

2 - Я могу проверить прибор, запущен ли сервер, и запустить его, если нет. Однако после завершения теста сервер все еще будет работать, что нежелательно.

Как правильно решить эту проблему?

Могу ли я заказать тесты так, чтобы последний тестовый файл закрывал почтовый сервер?

1 Ответ

0 голосов
/ 03 сентября 2018

Одним из решений является использование библиотеки Java GreenMail . Это позволяет вам запускать SMPT-почтовый сервер в вашей JVM, что облегчает запуск, остановку и проверку.

Вот несколько фрагментов из моего тестирования с GreenMail. Сначала вы создаете почтовый сервер:

(def mail-setup (ServerSetup. ServerSetup/PORT_SMTP nil ServerSetup/PROTOCOL_SMTP))
(def green-mail (GreenMail. mail-setup))
(.start green-mail)
; Now the server listens on localhosts SMPT port for emails. Run your test code
; Run the code under test. Then you can receive the emails
(doseq [m (.getReceivedMessages green-mail)]
   ; Verify the emails etc
   (println "Subject: " (.getSubject m)
               " TO: " (str/join "," (.getRecipients m Message$RecipientType/TO)))
 )
; When done
(.stop green-mail)

В зависимости от ваших тестов вы можете запускать и останавливать его для каждого теста. Или может поддерживать тестовый сервер для всего набора тестов.

Проверьте документацию GreeMail для более подробной информации. Он поддерживает тонны сценариев.

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