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

8.1.3 account-persist的測試代碼

定義並實現了賬戶的增、刪、改、查操作,當然也不能少了相應的測試。測試代碼位於src/test/java/目錄下,測試資源文件位於src/test/resources/目錄下。上一節SpringFramework的定義要求項目classpath下有一個名為account-service.properties的文件,並且該文件中需要包含一個persist.file屬性,以定義文件存儲的位置。為了能夠測試賬戶數據的持久化,在測試資源目錄下創建屬性文件account-service.properties。其內容如下:

該文件只包含一個persist.file屬性,表示存儲賬戶數據的文件路徑,但是它的值並不是簡單的文件路徑,而是包含了${project.build.testOutputDirectory}。這是一個Maven屬性,這裡讀者暫時只要瞭解該屬性表示了Maven的測試輸出目錄,其默認的地址為項目根目錄下的target/test-classes文件夾。也就是說,在測試中使用測試輸出目錄下的persist-data.xml文件存儲賬戶數據。

現在編寫測試用例測試AccountPersistService。同樣為了避免冗余,這裡只測試readAccount()方法,見代碼清單8-8。

代碼清單8-8 AccountPersistServiceTest.java

該測試用例使用與AccountPersistService一致的包名,它有兩個方法:prepare()與testReadAccount()。其中prepare()方法使用了@Before標注,表示在執行測試用例之前執行該方法。它首先檢查數據存儲文件是否存在,如果存在則將其刪除以得到乾淨的測試環境,接著使用account-persist.xml配置文件初始化SpringFramwork的IoC容器,再從容器中獲取要測試的AccountPersistService對象。最後,prepare()方法創建一個Account對象,設置對像字段的值之後,使用AccountPersistService的createAccount()方法將其持久化。

使用@Test標注的testReadAccount()方法就是要測試的方法。該方法非常簡單,它根據id使用AccountPersistService讀取Account對象,然後檢查該對像不為空,並且每個字段的值必須與剛才插入的對象的值完全一致。

該測試用例遵守了測試接口而不測試實現這一原則。也就是說,測試代碼不能引用實現類,由於測試是從接口用戶的角度編寫的,這樣就能保證接口的用戶無須知曉接口的實現細節,既保證了代碼的解耦,也促進了代碼的設計。