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

10.1.3 account-captcha的測試代碼

測試代碼位於src/test/java目錄,其包名也與主代碼一致,為com.juvenxu.mvnbook.account.captcha。首先看一下簡單的RandomeGeneratorTest,見代碼清單10-10。

代碼清單10-10 RandomeGeneratorTest.java

該測試用例創建一個初始容量為100的集合randoms,然後循環100次用RandomGenerator生成隨機字符串並放入randoms中,同時每次循環都檢查新生成的隨機值是否已經包含在集合中。這樣一個簡單的檢查能基本確定RandomGenerator生成值是否為隨機的。

當然這個模塊中最重要的測試應該在AccountCaptchaService上,見代碼清單10-11。

代碼清單10-11 AccountCaptchaServiceTest.java

該測試類的prepare()方法使用@Before標注,在運行每個測試方法之前初始化AccountCaptchaService這個bean。

testGenerateCaptcha()用來測試驗證碼圖片的生成。首先它獲取一個驗證碼主鍵並檢查其非空,然後使用該主鍵獲得驗證碼圖片,實際上是一個字節數組,並檢查該字節數組的內容非空。緊接著該測試方法在項目的target目錄下創建一個名為驗證碼主鍵的jpg格式文件,並將AccountCaptchaService返回的驗證碼圖片字節數組內容寫入到該jpg文件中,然後再檢查文件存在且包含實際內容。運行該測試之後,就能在項目的target目錄下找到一個名如dhb022fc.jpg的文件,打開是一個驗證碼圖片,如圖10-1所示。

圖10-1 AccountCaptchaServiceTest生成的驗證碼圖片

testValidateCaptchaCorrect()用來測試一個正確的Captcha驗證流程。它首先預定義了兩個Captcha的值放到服務中,然後依次生成驗證碼主鍵、驗證碼圖片,並且使用主鍵和已知的值進行驗證,確保服務正常工作。

最後的testValidateCaptchaIncorrect()方法測試當用戶反饋的Captcha值錯誤時發生的情景,它先預定義Captcha的值為「12345」,但最後驗證是傳入了「67890」,並檢查validateCaptcha()方法返回的值為false。

現在運行測試,在項目目錄下運行mvn test,就會得到如下輸出:

這個簡單的報告告訴我們,Maven運行了兩個測試類,其中第一個測試類RandomGeneratorTest包含1個測試,第二個測試類AccountCaptchaServiceTest包含3個測試,所有4個測試運行完畢後,沒有任何失敗和錯誤,也沒有跳過任何測試。

報告中的Failures、Errors、Skipped信息來源於JUnit測試框架。Failures(失敗)表示要測試的結果與預期值不一致,例如測試代碼期望返回值為true,但實際為false;Errors(錯誤)表示測試代碼或產品代碼發生了未預期的錯誤,例如產品代碼拋出了一個空指針錯誤,該錯誤又沒有被測試代碼捕捉到;Skipped表示那些被標記為忽略的測試方法,在JUnit中用戶可以使用@Ignore註解標記忽略測試方法。