这种共识似乎不是在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