讀古今文學網 > Maven實戰 > 5.3.3 account-email的測試代碼 >

5.3.3 account-email的測試代碼

測試相關的Java代碼位於src/test/java目錄,相關的資源文件則位於src/test/resources目錄。

該模塊需要測試的只有一個AccountEmailService.sendMail()接口。為此,需要配置並啟動一個測試使用的郵件服務器,然後提供對應的properties配置文件供Spring Framework載入以配置程序。準備就緒之後,調用該接口發送郵件,然後檢查郵件是否發送正確。最後,關閉測試郵件服務器,見代碼清單5-5。

代碼清單5-5 AccountEmailServiceTest.java

這裡使用GreenMail作為測試郵件服務器,在startMailServer()中,基於SMTP協議初始化GreenMail,然後創建一個郵件賬戶並啟動郵件服務,該服務默認會監聽25端口。如果你的機器已經有程序使用該端口,請配置自定義的ServerSetup實例使用其他端口。startMailServer()方法使用了@before標注,表示該方法會先於測試方法(@test)之前執行。

對應於startMailServer(),該測試還有一個stopMailServer()方法,標注@After表示執行測試方法之後會調用該方法,停止GreenMail的郵件服務。

代碼的重點在於使用了@Test標注的testSendMail()方法,該方法首先會根據classpath路徑中的account-email.xml配置創建一個Spring Framework的ApplicationContext,然後從這個ctx中獲取需要測試的id為accountEmailService的bean,並轉換成AccountEmailService接口,針對接口測試是一個單元測試的最佳實踐。得到了AccountEmailService之後,就能調用其sendMail()方法發送電子郵件。當然,這個時候不能忘了郵件服務器的配置,其位於src/test/resources/service.properties:

這段配置與之前GreenMail的配置對應,使用了smtp協議,使用本機的25端口,並有用戶名、密碼等認證配置。

回到測試方法中,郵件發送完畢後,再使用GreenMail進行檢查。greenMail.waitForIncomingEmail(2000,1)表示接收一封郵件,最多等待2秒。由於GreenMail服務完全基於內存,實際情況下基本不會超過2秒。隨後的幾行代碼讀取收到的郵件,檢查郵件的數目以及第一封郵件的主題和內容。

這時,可以運行mvn clean test執行測試,Maven會編譯主代碼和測試代碼,並執行測試,報告一個測試得以正確執行,構建成功。