我的應用程序的一部分依賴於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:相關模型功能測試錯誤