我聽到有人說,最好是通過公共方法爲私有方法編寫Junit測試。但在這種情況下,我應該測試私有方法以避免重複的代碼。這是好方法嗎?兩種公開方法調用私有方法
回答
這是一個主觀的味道,最佳實踐,我已經拿起和直覺的組合。
對於單元測試,我不介意直接調用私有函數,如果你通過單元測試意味着測試一個特定的函數而沒有別的。我不介意,因爲它減少了封裝代碼,與生產代碼相比,函數使用模式可能相當不尋常。
如果測試進一步超過了整個類或一系列函數,我寧願只使用公共方法,因爲其他代碼將使用它。
所以,是的,你可以和很多人通過這種方式測試通常是private
方法。通常該方法更改爲默認範圍,我建議添加Guava
提供的@VisibleForTesting
註釋。
這種方法的問題在於,它不允許(或限制)被測試代碼被重構。一個好的單元測試可以讓整個被測試的類被完全重構(同時保持相同的API),而不會導致測試失敗。
所以這裏有一個平衡點。由於public
方法對private
方法中發生的情況具有相同的要求,所以對每種公開方法充分行使這組要求是一種好的做法。
我的建議(取決於private
方法的複雜性並由其平衡)是在測試中創建一個實用方法,用於配置私有方法(將其設置爲表現特定方式)並在測試中使用此方法的公共方法。對於驗證方法執行相同操作。
另一種選擇是創建測試,測試private
方法的功能並通過反射Method
作爲入口點。這將允許您通過兩種公共方法測試所有功能而無需重複編碼。
我認爲你的解決方案很好。應該創建一個子測試方法,並在運行測試方法時調用子測試方法。所以測試將通過大多數情況。 +1 – xuongrong
- 1. 與方法公共方法與私有
- 2. java私有方法返回公開
- 3. Rhino Mocks驗證私有方法是從公共方法調用
- 4. 從公共方法調用私有方法?
- 5. 調用私有方法
- 6. 根據私有方法測試公共方法的方法
- 7. 如何將包含的私有方法公開爲公共類方法?
- 8. 調用javascript方法的兩種方法有什麼區別
- 9. C#:無法訪問私有方法中的公共方法
- 10. JUnit的最佳實踐:公共方法調用多個私有方法
- 11. 測試調用相同私有方法的多個公共方法
- 12. 有兩種equals()方法
- 13. 包私有類中的公共方法
- 14. 公共方法中的私有參數
- 15. 包私有類中的公共方法
- 16. javascript中的私有和公共方法
- 17. 繼承和公共/私有方法
- 18. 如何在私有屬性中調用公共方法?
- 19. 從公共方法調用模塊的私有函數
- 20. 如何聲明公共方法和私有方法在JavaScript
- 21. 使javascript私有方法可以訪問它的公共方法
- 22. TimePickerListener調用兩種方法同時
- 23. 調用兩種方法與空值
- 24. Ruby類使用靜態方法調用私有方法?
- 25. 使用findVirtual調用的方法處理私有方法
- 26. 調用另一個私有方法的電源嘲諷私有方法
- 27. 以另一種方法調用方法?
- 28. 一種方法調用方法一次
- 29. 另一種方法調用方法?
- 30. 在其他兩種方法完成後調用方法
您是說明確驗證比Junit測試中的重複代碼更有價值? – xuongrong
我想說這取決於你正在測試什麼,以及如何。 – dutt