我的应用程序的一部分依赖于JavaMail,移动排列消息等。是否可以在不触发IMAP服务器的情况下测试此模块以运行测试?在测试依赖于外部服务器或模块的东西时,我总是陷入困境。测试JavaMail相关模块
2
A
回答
1
无法测试没有什么IMAP服务器,如果你的应用程序发送的电子邮件。但是,如果你正确设计你的代码,你可以做的其他事情。你应该做的是分离你的依赖。这是什么意思?
你的代码应该只在一个地方访问第三方代码(在这种情况下是JavaMail)(大部分时间==只有一个类)。使用其余代码中的接口分隔此类,以便可以在测试中使用虚拟对象。
这里有一个例子,你不应该做什么(假设JavaMail的是外部依赖):
class Application {
public run(String[] receiverList, String message, String body) {
for (String receiver : receiverList) {
JavaMail.sendMessage(receiver, message, body);
}
}
}
您不能测试在这种情况下循环。做到这一点,而不是:
class Application {
private IApplicatioNMail mail;
public Application(IApplicationMail mail) {
this.mail = mail;
}
public run(String[] receiverList, String message, String body) {
for (String receiver : receiverList) {
mail.sendMessage(receiver, message, body);
}
}
}
class JavaApplicationMail implement IApplicationMail {
public sendMessage(String receiver, String message, String body) {
JavaMail.sendMessage(receiver, message, body);
}
}
这样你可以创建一个虚拟(模拟,等等)在测试中,以取代JavaApplicationMail。在你的测试中,外部收入永远不会被调用)。
的测试可能看起来类似的东西:
@Test
public void sentThreeMails() throws Exception {
IApplicationMail mailCounter = new MailCounter();
Application application = new Application(mailCounter);
application.run(new String[] { "one", "two", "three" }, "Hello", "Blah!");
assertEquals(3, mailCounter.calls);
}
class MailCounter implements IApplicationMail {
public counter = 0;
public sendMessage(String receiver, String message, String body) {
counter++;
}
}
2
尝试使用此mock为您的测试
1
开始为你的测试套件的IMAP服务器实际上可能是一个好主意。 GreenMail是专门为此目的设计的,它可让您从Java代码运行内存中的IMAP/POP3/SMTP服务器。
相关问题
- 1. 相关测试
- 2. 测试关注/模块使用的ActiveRecord
- 3. 测试相关模型是否存在
- 4. 测试ejabberd模块
- 5. 测试模块与测试::单元
- 6. python导入相关模块
- 7. 相关的Python模块
- 8. 导入模块测试
- 9. Django模块化测试
- 10. PrestaShop模块单元测试
- 11. 模块管理与测试
- 12. 模块化JMeter测试?
- 13. 测试重写模块
- 14. 测试播放模块
- 15. 测试Node.js,模拟并测试一个需要的模块?
- 16. RoboGuice单元测试注入应用程序模块而不是测试模块
- 17. 测试模块无法解析正在测试的模块[Angular4,Karma,Jasmine]
- 18. Rails:测试模块和模型冲突
- 19. 使用相同的log4j.properties进行多模块测试Maven项目
- 20. 为每个测试修补相同的模块
- 21. 的Python:单元测试模块和相对导入
- 22. Maven EAR模块和EJB依赖关系测试
- 23. 测试是否安装了Python模块依赖关系
- 24. Pax考试karaf 4.0.7使用模拟javamail
- 25. 单元测试与设计模式等相关
- 26. 测试相关模型是否已经建立?
- 27. 如何模拟测试的电源相关事件
- 28. 单元测试的数据模型:相关实体
- 29. 如何在实验室测试中模拟相关性
- 30. Ruby on Rails:相关模型功能测试错误