我目前被分配爲項目編寫測試,是否需要爲DAO類編寫測試?爲DAO編寫測試
爲DAO編寫測試
回答
這取決於:-)
如果你的DAO類僅包含獲取從DB實體所需的代碼,這是更好地測試他們在不同的集成測試*。要進行單元測試的代碼是您可以使用模擬DAO進行單元測試的「業務邏輯」。
[更新] E.g.與EasyMock你可以很容易地爲特定的類建立一個模擬(使用它的類擴展,甚至可以模擬具體的類),將它配置爲從特定的方法調用中返回一個特定的對象,並將它注入到你的類中進行測試。
EasyMock網站似乎現在正在運行,希望它會很快回來 - 然後您可以檢查文檔,這是恕我直言,相當乾淨徹底,有很多代碼示例。在你的問題中沒有太多細節,我不能給出更具體的答案。如果OTOH,DAO也包含業務邏輯,那麼你最好的選擇 - 如果你能做到這一點 - 將重構它們並將業務邏輯從DAO中移出,那麼你可以應用先前的策略。
但底線是,始終牢記單元測試座右銘「測試可能會破壞的所有東西」。換句話說,我們需要優先考慮我們的任務,並集中精力編寫能夠以最小的努力提供最大收益的測試。首先爲最關鍵的,最具有bug風險的代碼部分編寫單元測試。在你看來,代碼是非常簡單的,不可能破壞的是代碼。當然,建議您向具有代表性的具體代碼諮詢經驗豐富的開發人員 - 他們可能知道並注意到您可能沒有意識到的陷阱和問題。
*單元測試應該是輕量級的,快速和儘可能與環境隔離。因此,包含調用真實數據庫的測試不是單元測試,而是集成測試。儘管技術上它們可以用JUnit(和例如DbUnit)來構建和執行,但它們比真正的單元測試要複雜得多,速度要慢幾個數量級。有時這會使得它們不適合在每次小代碼更改後執行,因爲常規單元測試可能(並且通常應該)被使用。
好主意,確實如此。 – 2010-05-25 08:30:03
這將是一個功能或集成測試 – 2012-09-25 16:58:00
是的。這樣做有幾個好處。一旦你確定你的DAO層工作正常,後期階段的缺陷修復就變得容易了。
我會爭辯說,我們應該爲DAO編寫單元測試,並且最大的挑戰之一就是測試數據的設置和清理。這就是我認爲的框架,比如Spring JDBC測試框架可以讓我們通過使用不同的註釋來控制事務來幫助我們[例子:@Rollback(true)]。例如,如果您正在測試「創建/插入」操作,Spring將允許您在執行測試方法後完成回滾事務,從而始終保持數據庫始終處於其原始狀態。
你可以看看這個鏈接獲取更多信息:Spring Testing
這可能是更加有用,當你的集成測試,你不希望一個測試來破壞數據的完整性,這可能會導致另一測試失敗。
本書的xUnit Test Patterns爲這個問題提供了很多很好的見解。
- 1. 編寫DAO的Junit測試用例
- 2. 爲tensorflow編寫測試
- 3. 爲Laravel包編寫測試
- 4. 爲async.parallel編寫測試。
- 5. DAO單元測試
- 6. Apache Phoenix DAO測試
- 7. 單元測試DAO
- 8. 編寫JUnit測試
- 9. 單元測試一個DAO
- 10. 單元測試的DAO
- 11. 單元測試DAO層呢?
- 12. 單元測試dao類
- 13. DbUnit框架測試DAO層
- 14. 編寫JUnit測試來測試一組
- 15. 爲定價方法編寫測試
- 16. 如何爲GWT servlet編寫測試?
- 17. 如何爲此編寫功能測試
- 18. 爲隨機函數編寫測試
- 19. 在JAVA中爲Appium編寫測試
- 20. 如何爲GoogleDrive API編寫RSpec測試
- 21. 如何爲此編寫rspec 3.1測試
- 22. 爲REST api編寫測試NodeJS MongoDB
- 23. 爲異步過程編寫msUnit測試
- 24. 爲Django RESTful API編寫功能測試
- 25. 爲`用戶#索引'編寫Rspec測試
- 26. 爲Rails插件編寫測試
- 27. 如何爲此編寫rspec測試
- 28. 爲Youtube Oauth Api編寫測試
- 29. 爲Play websockets編寫單元測試
- 30. 爲vue-multiselect編寫單元測試
你可以給我快速的例子如何從數據庫測試getInstance,你有任何鏈接顯示這個?我想到嘲笑DAO – London 2010-05-25 08:34:02
@倫敦,看到我的更新。 – 2010-05-25 08:46:31
感謝您的廣泛解釋,我使用jMock其類似於easyMock – London 2010-05-25 08:54:40