我想在某些模型类上运行单元测试(Junit),这些模型类通常会发送确认事情发生的电子邮件。是否有一个模拟电子邮件服务器,您可以使用单元测试,以确认您的运行尝试发送电子邮件而不实际发送电子邮件?
这似乎很不错,只是不确定我想写自己的。电子邮件方面的应用程序堆栈是Velocity + Spring,因此最好只需更改applicationContext.xml文件即可指向测试服务器。
答案 0 :(得分:29)
备选答案:Dumbster是一个虚假的SMTP服务器,专为测试而设计。它是用Java编写的。
答案 1 :(得分:15)
我认为Mock JavaMail项目就是你想要的。
答案 2 :(得分:12)
我会看看GreenMail是否还活着(显然Dumbster死了),它有很多功能和很好的例子。
答案 3 :(得分:3)
我假设您使用的是Javamail,问题是javax.mail.Session
是最终的,因此无法模拟。
似乎其他人建议您只需定义自己的“邮件会话”界面并创建使用Javamail的实现。在您的测试中,您只需在“真实世界模式”中注入模拟,然后注入Javamail实现。
JMock和EasyMock都支持您要发送的消息的所有断言,并且您的测试已完成。
顺便说一句,我通常会尝试避免单元测试中的任何进程外调用 - 它会在您经常运行测试套件时将其杀死,这通常转化为运行较少且代码库问题开始发生。
答案 4 :(得分:1)
您可以尝试JavaMail Mock2 https://github.com/salyh/javamail-mock2
它主要关注IMAP / POP3,但也可以使用SMTP Mock。它可以在maven中心使用。
功能
答案 5 :(得分:0)
答案 6 :(得分:0)
我的解决方案是将邮件服务器包装在一个类中,该类接受所有配置选项并具有send()
方法。在我的测试中,我会模拟这个类并使用保存断言当前参数的东西覆盖send()
。
要测试邮件服务本身是否有效,请在本地发送邮件。如果你在Windows上,请尝试hMail。