假設我正在使用TDD創建一些類A.完成並有一個「綠色」欄後,我決定只用靜態方法從類A中提取某些類B使用一些重構工具。我現在有A類和B類都完全單元測試,但只能通過類A的測試類。我現在是否應該創建一個特定於B類功能的測試類,即使這會重複測試?通過其他測試類的單元測試類
回答
一如往常,這取決於你的背景。你在乎什麼?
整體行爲
如果你正在構建一個系統內部使用,甚至是公共的(網絡)服務,在那裏你運送軟件是整個系統,您不必太關心一個班級。 如果您正在構建系統,則測試系統。
只要它包含在測試中,就知道您的系統運行正常。但是,您可能會遇到幾個月後意識到您不再需要原始A
類的情況,因此您需要刪除它並進行相應的單元測試。這可能會導致B
的測試覆蓋率下降,因此,密切關注代碼覆蓋率趨勢可能是個好主意。
單位行爲
如果你正在構建一個(類)庫,或框架,你出貨的每個公共類作爲產品的一部分。如果您的圖書館有多個用戶,則需要開始考慮如何避免發生重大變化。
避免重大更改的最有效方法之一是通過單元測試覆蓋每個類。只要你don't change the tests,你知道,如果所有的測試都是綠色的,那麼重大更改是不太可能的。但是,這要求您測試所有公開課程和成員。
因此,如果您將B
提取到公共類中,現在它已成爲其他消費者可能依賴的類,並且如果您更改了它,那將是一次重大更改。因此,你應該用新的測試來覆蓋它。 如果您正在構建一個單元,然後測試該單元。
我除了Marks的答案我想補充說創建這樣一個類作爲B是一種代碼味道給我。這當然不一定是這樣,但有可能它的目的不明確,可能違反了固體原則。如果你發現自己在命名課程時遇到了問題,那很可能是這種情況。 – spacedoom
@spacedoom這是不是有點苛刻?從另一個類中提取一個類可能是一個完全有效的重構。在這種情況下它是靜態的可能是一種代碼異味,但由於我知道你是F#粉絲,所以靜態類可能只是一個等待實現的功能模塊。然而,SOLID它不是,我同意:) –
我當然不打算苛刻,只是給一個oop標記的問題提供和麪向對象的評論。我沒有選擇一般的提取類,只是像B這樣的類。我非常確定它的名字將會是lika AHelper,我們不想那樣做,是嗎? 無論如何,你是該死的吧,如果它被寫成F#中的功能模塊會更好! :) – spacedoom
從你所描述的答案是創建另一個新的測試。如果你(或其他不熟悉「共享測試」的人)更改了其他類,則不再進行測試。
如果這似乎浪費,把公共測試代碼中第三類......
- 1. 單元測試類
- 2. 如何單元測試嚴重依賴於其他類的類?
- 3. 的Python - 單元測試類
- 4. Django的:在其他單位再利用單元測試,測試
- 5. 通過單元測試和單元的Mockito和測試的Mockito
- 6. TestNG多測試類 - 運行其他類
- 7. C++單元測試測試,使用模板測試類
- 8. iOS單元測試:類在
- 9. 單元測試具體類
- 10. 單元測試私有類
- 11. Python類和單元測試
- 12. 單元測試dao類
- 13. 單元測試門面類
- 14. 嘲笑單元測試類
- 15. 單元測試SessionScoped類
- 16. 單元測試android類
- 17. 單元測試操作類
- 18. 單元測試WCMUsePOJO類
- 19. 單元測試包含其他類的實例不僅嘲笑
- 20. 簡單類測試不通過
- 21. 單元測試:如何獨立於父類測試子類?
- 22. 單元測試 - 是否有單元測試調用其他單元測試的不良形式
- 23. Dieharder dab_monobit2測試失敗 - 所有其他測試都通過 - TRNG
- 24. 單元測試 - 引用類「類」變量
- 25. 單元測試類繼承抽象類
- 26. 單元測試:在父測試類中生成被測單元的模擬
- 27. 測試通用類
- 28. 測試類別不過濾測試並運行過濾測試
- 29. Python的單元測試報告通過測試
- 30. python3如何設置在單元測試中通過的測試
重複爲:http://stackoverflow.com/questions/21482602/should-i-write-tests-for-class-a-if-its-covered-from-class-b/21482748#21482748 – Mik378
尼斯找到,謝謝 – jordan