簡體   English   中英

用於在Java中測試Service / DAO層的工具和方法

[英]Tools and Methods for testing Service/DAO layers in Java

我試圖找出測試服務和DAO層的最佳方法。 那么,一些子問題......

  1. 在測試服務層時,最好是針對模擬DAO層或指向測試環境的“實時”DAO層進行測試嗎?
  2. 當唯一的測試數據庫在共享環境中時,如何測試DAO層中的SQL(Oracle / DB2)
  3. 你如何解決任何DAO寫/更新的悖論需要使用DAO讀取進行測試,這也需要進行測試?

我在這個領域尋找任何好的文檔,文章或參考文獻以及任何有助於自動化過程的工具。 我已經了解了JUint的單元測試和Hudson的CI。

在測試的指導下,獲得不斷增長的面向對象軟件 它有一些關於如何測試數據庫訪問的好技巧。

就個人而言,我通常打破2中的DAO測試,使用模擬數據庫進行單元測試以測試DAO上的功能,並進行集成測試,以測試針對數據庫的查詢。 如果您的DAO只有數據庫訪問代碼,則不需要進行單元測試。

我所采用的書中的一個建議是(集成)測試必須將更改提交給DB。 我已經學會了這樣做,在使用hibernate並確定測試標記為回滾並且DB從未得到插入語句之后。 如果您使用觸發器或任何類型的驗證(甚至是FK),我認為這是必須的。

另一件事,遠離dbunit,開始工作是一個很好的框架,但當項目變得非常小時,它變得很糟糕。 我的偏好是擁有一組Test Data Builder類來創建數據,並將其插入測試設置或測試本身。

並檢查dbmigrate,它不是用於測試,但它將幫助您管理腳本以升級和降級數據庫架構。

在共享數據庫服務器的場景中,我為每個環境創建了一個模式/用戶。 由於每個開發人員都有自己的“本地”環境,因此他還擁有一個模式。

以下是我的答案:

  1. 使用模擬DAO來測試您的服務。 更容易,更快。 使用EasyMock或Mockito或任何其他模擬框架來測試服務層。
  2. 為每個開發人員提供自己的數據庫模式來執行他的測試 這樣的模式通常是空的:單元測試在運行測試之前使用小的測試數據集填充數據庫,並在測試完成后清空它。 為此使用DBUnit
  3. 如果讀取對定義明確的靜態測試數據集(您應該進行單元測試)起作用,那么您可以依賴它們對寫入進行單元測試。 但您也可以使用即席查詢甚至DBUnit來測試寫入是否按預期工作。 測試不一定按此順序運行的事實並不重要。 如果一切都過去了,那么一切都好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM