依賴注入幫助你單元測試你的代碼非常好。但是我們如何測試在運行時最終是否注入了正確的依賴關係?例如,我有一個服務類,它包含一個服務驗證器列表。由於驗證器列表是由DI容器注入的,我們如何確保正確的驗證器被注入?如果某些開發人員錯誤地從列表中刪除了驗證程序,該怎麼辦?即使我們在依賴注入中編寫測試,我們也無法在不破壞封裝的情況下斷言所有依賴。唯一的方法是在服務的驗證行爲上進行斷言的集成測試。如果服務行爲複雜,那麼編寫集成測試就變得很困難。有任何想法嗎 ??你如何測試依賴注入?
8
A
回答
6
套用你的問題:
我已經測試我的應用程序,它們都工作的各個組成部分,但我怎麼知道應用程序作爲一個整體的作品?
好消息
考慮多麼好的一個位置,你是,相比於在一個位置被問:
現在我已經寫了這些代碼,我怎麼知道應用程序的工作?
您發現並刪除了單元測試中的錯誤。使用依賴注入樣式進行編碼使依賴性清晰並消除對全局變量的依賴。這些技術本身就意味着你會有更少的錯誤,並且特別是當整個應用程序放在一起時只顯示自己的更少的錯誤。
測試更大
現在,移動在回答你的問題,你可以寫一個自動測試斷言特定的驗證是由您的依賴注入容器返回。更重要的是,我喜歡書面方式測試,: -
- 詢問DI容器對象(其背後就在於合作對象的時候,例如驗證列表)
- 詢問對象執行它的功能(驗證這個數據)
- 斷言結果(例如驗證錯誤)
你可能要替換訪問數據庫,當前服務器時間,網絡服務等與測試雙某些對象。這很容易,因爲您正在使用依賴注入。
除非一個類特別麻煩,否則我傾向於在這個級別測試,因爲它允許更多的測試在重構過程中存活。循環複雜度爲1的類如果作爲較大測試的一部分進行操作,則不需要單獨測試。循環複雜度較高的類可能。
很多測試,但它的工作?
即使這樣,你可能會想,但是整件事情是否奏效?
爲了最終回答這個問題,您需要測試應用程序的最終形式。對於Web應用程序,這意味着將其部署在具有適當數據庫和真正防火牆的適當服務器上,然後您可以手動測試或測試諸如Selenium之類的東西。
注入正確依賴關係的失敗會導致注入組件意圖做的任何功能的災難性錯誤。沒有必要測試每個組合,但輕輕觸摸每個組件。
相關問題
- 1. 依賴注入和測試
- 2. 你如何在角度測試依賴注入?
- 3. 使用依賴注入系統你如何單元測試你的代碼
- 4. 測試注入依賴到你的struts2行動
- 5. 你如何使用依賴性服務和依賴注入?
- 6. Angular2依賴注入和單元測試
- 7. 單元測試 - 依賴注入zf2
- 8. 單元測試中的依賴注入
- 9. Scalamock測試Java依賴注入
- 10. 向測試注入依賴關係
- 11. 依賴注入的測試優勢
- 12. OSGi中的依賴注入vs測試
- 13. C++和依賴注入單元測試
- 14. Laravel單元測試依賴注入
- 15. 深度/嵌套依賴注入測試
- 16. 單元測試C#MOQ依賴注入
- 17. 依賴注入和測試雙打
- 18. 單元測試和依賴注入深度嵌套依賴
- 19. C#依賴注入 - 如何注入無源的依賴關係?
- 20. Java Play2 Spring測試 - 測試上下文依賴注入?
- 21. Jersey測試,Grizzly和HK2依賴注入功能測試
- 22. 如何創建用於測試QTcpSocket的依賴注入?
- 23. 如何在控制器測試中注入依賴關係?
- 24. 如何單元測試GlassController行動沒有SitecoreContext依賴注入
- 25. 如何在Spek測試中使用依賴注入
- 26. 如何使用RoboGuice向Robolectric測試課注入依賴關係
- 27. 如何在cpputest單元測試中注入依賴
- 28. 如何在Jasmine測試中注入控制器依賴關係?
- 29. 如何注入d3依賴?
- 30. 使用咕嚕注入你的依賴
我認爲集成測試是正確的答案,但你是對的,有些東西可能很難測試。 – Kevin
一些依賴注入框架(如果不是大多數)允許您讓容器驗證所有註冊並測試是否可以創建每個註冊。如果可以,請在應用程序啓動時觸發此驗證。這可以防止在不能創建所有依賴關係時啓動應用程序,這樣您可以在運行(或調試)應用程序時立即找到DI配置錯誤。 – Steven
@Steven hibernate是否有這樣的驗證工具? – mauryat