2013-05-17 83 views

回答

1

這是一個主觀的味道,最佳實踐,我已經拿起和直覺的組合。

對於單元測試,我不介意直接調用私有函數,如果你通過單元測試意味着測試一個特定的函數而沒有別的。我不介意,因爲它減少了封裝代碼,與生產代碼相比,函數使用模式可能相當不尋常。

如果測試進一步超過了整個類或一系列函數,我寧願只使用公共方法,因爲其他代碼將使用它。

+0

您是說明確驗證比Junit測試中的重複代碼更有價值? – xuongrong

+0

我想說這取決於你正在測試什麼,以及如何。 – dutt

0

所以,是的,你可以和很多人通過這種方式測試通常是private方法。通常該方法更改爲默認範圍,我建議添加Guava提供的@VisibleForTesting註釋。

這種方法的問題在於,它不允許(或限制)被測試代碼被重構。一個好的單元測試可以讓整個被測試的類被完全重構(同時保持相同的API),而不會導致測試失敗。

所以這裏有一個平衡點。由於public方法對private方法中發生的情況具有相同的要求,所以對每種公開方法充分行使這組要求是一種好的做法。

我的建議(取決於private方法的複雜性並由其平衡)是在測試中創建一個實用方法,用於配置私有方法(將其設置爲表現特定方式)並在測試中使用此方法的公共方法。對於驗證方法執行相同操作。

另一種選擇是創建測試,測試private方法的功能並通過反射Method作爲入口點。這將允許您通過兩種公共方法測試所有功能而無需重複編碼。

+0

我認爲你的解決方案很好。應該創建一個子測試方法,並在運行測試方法時調用子測試方法。所以測試將通過大多數情況。 +1 – xuongrong