我的應用程序的一部分依賴於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. 相關測試
- 3. 測試關注/模塊使用的ActiveRecord
- 4. 測試相關模型是否存在
- 5. Pearson相關測試
- 6. npm模塊測試
- 7. 測試Ruby模塊
- 8. 測試Android模塊
- 9. Guice:模塊測試
- 10. Maven測試模塊
- 11. 測試ejabberd模塊
- 12. 測試Verilog模塊
- 13. 與PendingIntent.getBroadcast()相關的測試測試
- 14. 單元測試相關測試
- 15. 測試模塊與測試::單元
- 16. 相關的Python模塊
- 17. python導入相關模塊
- 18. Play模塊測試和FakeApplication
- 19. 測試播放模塊
- 20. 從模塊運行測試
- 21. 模塊化JMeter測試?
- 22. Django模塊化測試
- 23. 測試重寫模塊
- 24. 模塊管理與測試
- 25. 單元測試模塊javascript
- 26. 導入模塊測試
- 27. 測試套,測試模塊,測試座,測試方案和測試用例
- 28. Maven:如何在第三個模塊中使用相同的測試測試兩個模塊
- 29. Spring集成測試:相關的模塊中無法找到級bean
- 30. 主模塊和相關模塊之間的關係