2009-04-15 73 views
3

我有一個簡單的CRUD操作,需要進行單元測試。 這些測試用例是針對DAO層的 - 所以所有的測試都是針對數據庫的,因此不能被模擬。JUnit測試用例 - 設置數據

所以我有一個測試用例用於創建另一個用於更新,另一個用於讀取。

  1. 我應該硬編碼JUnit類中的數據還是將其外化?

  2. Read TestCase顯然需要數據庫中的數據。我應該依賴創建測試用例來設置數據還是使用SQL語句?

這是什麼最佳實踐?

如果你可以指向我討論這個問題的互聯網資源 - 那將是很棒的。

回答

5

Spring has excellent support for this sort of thing - 您希望針對「測試」數據庫運行的單元測試,可以在每個單元測試中重新創建腳本。

最後一句的後半部分是開發可重用和可擴展的單元測試的關鍵 - 對數據庫的單元測試不應該被迫依賴樂觀的數據處於特定狀態或依賴於以前的單元測試首先運行 - 您需要爲每個單元測試重新創建數據庫,以便每個測試用例都獲得「乾淨」版本的數據。

設置Spring MVC的分步教程實際上是has a section on setting up unit tests for database classes,我認爲這將是一個有價值的參考,即使您不使用Spring MVC - 您可以將其用作如何設置測試的參考數據庫從構建腳本創建/初始化,使用Spring容器重新加載每次測試運行的數據等。

2

我推薦使用DBUnit。允許您使用文件將數據庫設置爲已知狀態,並與預期的結果功能進行很好的比較。入門指南是here

最好不要將任何提交作爲測試用例的一部分來執行,然後可以在tearDown()上回滾。