2013-05-17 56 views

回答

1

这是一个主观的味道,最佳实践,我已经拿起和直觉的组合。

对于单元测试,我不介意直接调用私有函数,如果你通过单元测试意味着测试一个特定的函数而没有别的。我不介意,因为它减少了封装代码,与生产代码相比,函数使用模式可能相当不寻常。

如果测试进一步超过了整个类或一系列函数,我宁愿只使用公共方法,因为其他代码将使用它。

+0

您是说明确验证比Junit测试中的重复代码更有价值? – xuongrong

+0

我想说这取决于你正在测试什么,以及如何。 – dutt

0

所以,是的,你可以和很多人通过这种方式测试通常是private方法。通常该方法更改为默认范围,我建议添加Guava提供的@VisibleForTesting注释。

这种方法的问题在于,它不允许(或限制)被测试代码被重构。一个好的单元测试可以让整个被测试的类被完全重构(同时保持相同的API),而不会导致测试失败。

所以这里有一个平衡点。由于public方法对private方法中发生的情况具有相同的要求,所以对每种公开方法充分行使这组要求是一种好的做法。

我的建议(取决于private方法的复杂性并由其平衡)是在测试中创建一个实用方法,用于配置私有方法(将其设置为表现特定方式)并在测试中使用此方法的公共方法。对于验证方法执行相同操作。

另一种选择是创建测试,测试private方法的功能并通过反射Method作为入口点。这将允许您通过两种公共方法测试所有功能而无需重复编码。

+0

我认为你的解决方案很好。应该创建一个子测试方法,并在运行测试方法时调用子测试方法。所以测试将通过大多数情况。 +1 – xuongrong