我听到有人说,最好是通过公共方法为私有方法编写Junit测试。但在这种情况下,我应该测试私有方法以避免重复的代码。这是好方法吗?两种公开方法调用私有方法
回答
这是一个主观的味道,最佳实践,我已经拿起和直觉的组合。
对于单元测试,我不介意直接调用私有函数,如果你通过单元测试意味着测试一个特定的函数而没有别的。我不介意,因为它减少了封装代码,与生产代码相比,函数使用模式可能相当不寻常。
如果测试进一步超过了整个类或一系列函数,我宁愿只使用公共方法,因为其他代码将使用它。
所以,是的,你可以和很多人通过这种方式测试通常是private
方法。通常该方法更改为默认范围,我建议添加Guava
提供的@VisibleForTesting
注释。
这种方法的问题在于,它不允许(或限制)被测试代码被重构。一个好的单元测试可以让整个被测试的类被完全重构(同时保持相同的API),而不会导致测试失败。
所以这里有一个平衡点。由于public
方法对private
方法中发生的情况具有相同的要求,所以对每种公开方法充分行使这组要求是一种好的做法。
我的建议(取决于private
方法的复杂性并由其平衡)是在测试中创建一个实用方法,用于配置私有方法(将其设置为表现特定方式)并在测试中使用此方法的公共方法。对于验证方法执行相同操作。
另一种选择是创建测试,测试private
方法的功能并通过反射Method
作为入口点。这将允许您通过两种公共方法测试所有功能而无需重复编码。
我认为你的解决方案很好。应该创建一个子测试方法,并在运行测试方法时调用子测试方法。所以测试将通过大多数情况。 +1 – xuongrong
- 1. 与方法公共方法与私有
- 2. java私有方法返回公开
- 3. Rhino Mocks验证私有方法是从公共方法调用
- 4. 从公共方法调用私有方法?
- 5. 调用私有方法
- 6. 根据私有方法测试公共方法的方法
- 7. 如何将包含的私有方法公开为公共类方法?
- 8. 调用javascript方法的两种方法有什么区别
- 9. C#:无法访问私有方法中的公共方法
- 10. JUnit的最佳实践:公共方法调用多个私有方法
- 11. 测试调用相同私有方法的多个公共方法
- 12. 有两种equals()方法
- 13. 包私有类中的公共方法
- 14. 公共方法中的私有参数
- 15. 包私有类中的公共方法
- 16. javascript中的私有和公共方法
- 17. 继承和公共/私有方法
- 18. 如何在私有属性中调用公共方法?
- 19. 从公共方法调用模块的私有函数
- 20. 如何声明公共方法和私有方法在JavaScript
- 21. 使javascript私有方法可以访问它的公共方法
- 22. TimePickerListener调用两种方法同时
- 23. 调用两种方法与空值
- 24. Ruby类使用静态方法调用私有方法?
- 25. 使用findVirtual调用的方法处理私有方法
- 26. 调用另一个私有方法的电源嘲讽私有方法
- 27. 以另一种方法调用方法?
- 28. 一种方法调用方法一次
- 29. 另一种方法调用方法?
- 30. 在其他两种方法完成后调用方法
您是说明确验证比Junit测试中的重复代码更有价值? – xuongrong
我想说这取决于你正在测试什么,以及如何。 – dutt