在Clojure测试中测试邮件服务器

时间:2018-09-02 14:40:22

标签: testing clojure mail-server

我需要在clojure项目中测试我们的邮件服务器。为此,我想我会打开一个模拟服务器并使用该模拟服务器发送电子邮件,并检查是否已发送。为此,我发现了这个server

能够执行

lein test

并且已经测试了每个测试,我需要在每个测试之前运行一次SMTP服务器,最后运行一次。我还可以在固定装置中运行服务器,并在每次测试后退出它。由于我正在运行约100个测试,因此始终启动和关闭服务器没有意义。

我认为的方法如下:

1-我编写了一个bash脚本,该脚本启动(模型)邮件服务器,运行lein测试,然后关闭服务器。 (在这里,我失去了在IDE中执行lein测试的便利性)

2-我可以用夹具检查服务器是否启动,如果没有启动,请启动它。但是,测试完成后,服务器仍将运行,这是不希望的。

解决此问题的正确方法是什么?

我可以在clojure中订购测试,以便最后一个测试文件关闭邮件服务器吗?

1 个答案:

答案 0 :(得分:1)

一种解决方案是使用Java GreenMail库。它使您可以在JVM中启动SMPT邮件服务器,从而轻松启动,停止和检查。

以下是我通过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文档。它支持大量的方案。