[英]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.