這種共識似乎不是在TDD時測試私有方法。TDD重複聲明
Should Private/Protected methods be under unit test?
我不停的按這個相同的情況。我有一個私有方法(例如它將所有選項切換爲關閉)。它改變了很多狀態,並被一些公共方法調用。無論調用哪些公用方法(所有選項都設置爲off),私有方法對狀態所做的更改將保持不變。
什麼是最好的方式來測試這個私有方法的功能,而無需添加許多有效地做同樣事情的測試?
btw,我正在使用QUnit來測試Javascript對象。
這是我的課程的過於簡化的版本。
http://jsfiddle.net/twistedinferno/UMgAx/
編輯
什麼我真的想在這裏問是不是「我不應該或者我應該測試私有方法」作爲已經回答這個問題的答案是否定的。我想知道如何最好地測試每個公共方法,因爲使用我的私有方法會導致許多斷言相同。相同的私有方法被許多公共方法調用。可以有很多重複的斷言來測試當許多公共方法中的每一個調用我的私有方法時發生的狀態變化嗎?
新撥弄測試 http://jsfiddle.net/twistedinferno/JHzWh/
這裏是一個過於簡化的小提琴http://jsfiddle.net/twistedinferno/UMgAx/我的真實事例證明過大增加或過於複雜凝結。公共功能肯定存在重疊,但我不確定該怎麼做。 – orangesherbert
@TwistedInferno:在這個例子中,它看起來像你打算測試的是後面三個函數,而第一個函數是私有函數? (誠然,我不熟悉JavaScript對象。)對於外部觀察者來說,私有函數甚至存在並不重要。三個公衆測試。他們都在內部使用相同的私人功能這一事實對測試並不重要。 (事實上,該測試也可以有一個共享的私有函數來驗證普遍預期的業績。) – David
燁,用下劃線的方式是私人的,那些沒有是公共的(只是一個約定,另一個選項是關閉其效率較低在內存方面)。所有的燈都是公開的。好的,所以我應該爲每個公共方法的每個亮度值包含四個斷言? (即4 x 3斷言)對我來說是重複測試,感覺不太對。 – orangesherbert