簡體   English   中英

我應該使用mock或dbunit來測試訪問數據庫的方法嗎?

[英]Should I use mock or dbunit to test a method which access to a database?

我有一個方法,它使用一些DAO調用數據庫。

我應該使用模擬機制來避免管理數據庫(以及模擬所有DAO方法),還是應該使用dbunit(或某些等價物)通過在內存中加載和初始化數據庫來測試(如hsqldb)?

這些方法的優缺點是什么(mock vs dbunit)?

您想測試數據庫。 在這種情況下,我沒有看到模擬是否有意義。 一旦你知道DAO正在工作,那么將模擬注入使用它們的服務就適合了。

在此期間,請測試您的數據庫。 您可以創建臨時測試數據庫,也可以使所有測試都是事務性的:設置測試工作單元,執行它,驗證它,回滾它。

我建議使用模擬對象,一般情況下,數據庫訪問並不是真正的高性能並花費很多時間,我們有一個項目有超過4000個單元測試,運行完整的測試需要3個多小時,特別是考慮到設置和撕裂在每次測試之前和之后訪問數據庫。

關於dbunit,我使用它,所以我不能說它的好壞與否,但正如我所說的,我會避免在單元測試中訪問數據庫,它應該僅限於邏輯單元。

這絕對是一個難以回答的問題; 但是,我建議和我通常更喜歡的是,針對嵌入式數據庫或外部測試數據庫(作為集成測試)測試DAO本身,以便您了解DAO對某種讀取數據庫的正確運行。

然后,對於使用DAO的組件,您可以模擬它以將測試與必須顯式使用數據庫分離。

這種方法的缺點是你必須有某種嵌入式或其他數據庫可用於測試。

你可以模擬你的DAO單元測試; 但是,您並不完全確定您的模擬將成為數據庫將提供什么的真實表示。

希望這可以幫助。

暫無
暫無

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

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