我需要在clojure项目中测试我们的邮件服务器。为此,我想我会打开一个模拟服务器并使用该模拟服务器发送电子邮件,并检查是否已发送。为此,我发现了这个server。
能够执行
lein test
并且已经测试了每个测试,我需要在每个测试之前运行一次SMTP服务器,最后运行一次。我还可以在固定装置中运行服务器,并在每次测试后退出它。由于我正在运行约100个测试,因此始终启动和关闭服务器没有意义。
我认为的方法如下:
1-我编写了一个bash脚本,该脚本启动(模型)邮件服务器,运行lein测试,然后关闭服务器。 (在这里,我失去了在IDE中执行lein测试的便利性)
2-我可以用夹具检查服务器是否启动,如果没有启动,请启动它。但是,测试完成后,服务器仍将运行,这是不希望的。
解决此问题的正确方法是什么?
我可以在clojure中订购测试,以便最后一个测试文件关闭邮件服务器吗?
答案 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文档。它支持大量的方案。