2008-09-06 48 views
8

我一直在努力執行單元測試,目前有一些代碼,執行以下操作:的JUnit數據庫代碼

  1. 查詢外部數據庫,裝載 到進料臺
  2. 查詢視圖, 這是我的進料和數據 表的增量,更新數據表,以匹配 供給臺

我的單元測試策略是這樣的:

我有一個測試數據庫,我可以自由操作。

  1. 在設置()時,一些數據加載到我的測試分貝
  2. 運行我的代碼,使用我的測試分貝爲源
  3. 檢查數據表,檢查計數和的存在/不存在某些記錄
  4. 明確的測試分貝,在一組不同的數據再次
  5. 運行代碼再次
  6. 檢查數據表
加載10

顯然,我有我加載到源數據庫建立這樣,我知道某些記錄應當被添加,刪除,更新的數據集等

看起來這是有點麻煩,並應該有更簡單的方法?有什麼建議麼?

回答

8

您是否試圖測試生成增量的視圖,或者測試代碼是否正確添加,刪除和更新以響應視圖?

如果你想測試視圖,你可以使用像DBUnit這樣的工具來填充你的數據源和數據表,用你手動計算出的各種數據。然後,對於每個測試,您將驗證視圖是否返回匹配集。

如果您想測試您的代碼如何響應視圖檢測到的差異,我會嘗試將數據庫訪問抽象出來。我想象一個可以傳遞結果集(或者POJO/DTO列表)的Java方法,並返回要添加的參數Object數組(或POJO)的列表。其他方法將解析差異列表以查找要刪除和更新的項目。然後,您可以創建一個模擬結果集或pojo,將它們傳遞給您的代碼並驗證返回的參數是否正確。所有這些都不會觸及數據庫

我認爲關鍵是將您的過程分解爲多個部分並儘可能獨立地測試每個部分。

6

DbUnit將滿足您的需求。有一點需要注意的是,他們已經改用SLF4J作爲他們的日誌外觀而不是JCL。您可以將SLF4J配置爲將日誌記錄轉發到JCL,但是如果默認情況下在其Nop日誌提供程序中使用Maven DbUnit,則需要警告您,因此您必須使用最近關於此衝突的排除項,I blogged

1

我使用DbUnit,但我也很努力地不必對數據庫進行測試。 針對數據庫的測試應該僅用於測試數據庫接口。 所以我有模擬Db連接,我可以設置數據用於所有其餘的測試。

1

如果您使用的是Maven,則可以選擇使用sql-maven-plugin。它允許您在Maven構建週期中運行數據庫初始化/填充腳本。

1

除了已經建議的DBUnit,你可能想看看Unitils。它使用DBUnit的,但提供比以上(從網站引用):

  • 數據庫自動維護,與增量, 重複和後處理腳本
  • 自動禁用約束和設置序列支持最小值
  • 支持Oracle,HSQLDB中,MySQL,DB2,PostgreSQL中,MSSQL和德比
  • 簡化測試數據庫連接設置
  • 測試數據的簡單插入與DBUnit的*在事務中運行測試
  • JPA實體管理器創建和注入對Hibernate,TopLink和* 的Hibernate SessionFactory的創建和 會議
  • 自動測試JPA實體的映射/休眠映射 對象與數據庫