我听说有人说最好通过公共方法为私有方法编写Junit测试。但在这种情况下,我应该测试私有方法以避免重复代码。这是好方法吗?
问问题
373 次
2 回答
1
这是主观品味、我学到的最佳实践和直觉的结合。
对于单元测试,我不介意直接调用私有函数,如果你通过单元测试的意思是测试一个特定的函数而不是别的。我不介意,因为它减少了包装器代码,并且与生产代码相比,函数使用模式可能相当不寻常。
如果测试比这更进一步,整个类或一系列函数,我更喜欢只使用公共方法,因为其他代码将使用它。
于 2013-05-17T11:24:06.783 回答
0
所以,是的,你可以而且很多人确实以这种方式测试了通常private
的方法。通常该方法更改为默认范围,我建议添加@VisibleForTesting
由Guava
.
这种方法的问题在于它不允许重构被测代码(或限制其能力)。一个好的单元测试可以让整个被测类完全重构(同时保持相同的 API),而不会导致测试失败。
所以这里有一个平衡。由于这两种public
方法对方法中发生的事情都有相同的要求,private
因此对每个公共方法充分执行这组要求是一种很好的做法。
我的建议(取决于private
方法的复杂性并加以平衡)是在您的测试中创建一个实用方法来配置私有方法(将其设置为以特定方式运行)并在公共方法的测试中使用此方法。对验证方法执行相同操作。
另一种选择是创建测试来测试private
方法的功能并将反射Method
作为入口点传递。这将允许您通过两种公共方法测试所有功能,而无需重复代码。
于 2013-05-17T11:53:25.880 回答