将私有方法更改为受保护以进行JUNIT测试是一个不错的主意。将私有方法更改为受保护以进行测试
8
A
回答
9
有时候有用,是的。
如果类是可扩展的,请确保使方法最终。
另外,记录该方法不应该被相同包的子类或外部类调用的事实。
我使用Guava @VisibleForTesting注释来说明该方法实际上应该是私有的。
+0
感谢您打开我的眼睛@VisibleForTesting。我不知道这存在。它仍然觉得这有点不完美,因为它仅仅为了测试的目的而影响实现的语法,但它比暴露应该是私有的成员和方法要好。而限制测试接口方法似乎是一个过分严格,有时不切实际的限制。 – Lolo 2013-01-18 18:06:50
4
您可以将方法打包为本地。
您可以使用反射调用私有方法,或者您可以决定不应该直接测试private
方法,只能间接测试。
5
总的来说不是。单元测试的想法是测试单位。换句话说,接口方法的实现。 如果你想测试一个你不能“看到”的方法,这可能是一种代码异味。也许你没有把你的业务逻辑从UI代码中分离出来。
所以最好的想法是重新考虑你的架构。但是,如果替代方法是不测试代码,那么保护这些方法是个好主意。
1
尽管您应该更喜欢按照@ user714965的建议进行重构,但PowerMock的MockPrivate可以在不打开私有方法的情况下进行模拟。
首先编写测试通常会导致您不需要模拟私有方法的设计。
相关问题
- 1. 将私有方法更改为受保护或包私有单元测试 - 好还是不好?
- 2. 如何在受测试的方法中模拟受保护/私有方法?
- 3. 受保护的和私有的方法
- 4. 将私有或受保护的方法转换为公开
- 5. EasyMock和测试受保护的方法
- 6. 测试驱动开发:为私有/受保护变量编写测试
- 7. 确保私有/受保护方法的输入?
- 8. 为单元测试添加受保护方法的好习惯?
- 9. 保持API调用私有/受保护
- 10. Rails中的受保护和私有方法
- 11. 保护window.opener免受更改
- 12. Junit测试私有方法
- 13. Ruby中的私有/受保护块?
- 14. C++类(公共,私有和受保护)
- 15. 受保护/私有继承铸造
- 16. 我应该访问单元测试的受保护方法吗?
- 17. 受保护的方法
- 18. 为什么要调用受保护的或私有的CSharp方法/变量?
- 19. 重构揭示私有方法进行单元测试
- 20. Mocha Chai测试受保护的路线
- 21. 使用Arquillian测试受保护的EJB
- 22. 私人/受保护方法的城堡温莎拦截器
- 23. 更改摩卡测试以进行笑话测试
- 24. 更改受保护的工作表
- 25. 是否有可能将方法属性从公共私有方法更改为私有方法,并且可以从类内部返回运行时方法?
- 26. 如何测试私有方法?
- 27. 使用Pex测试私有方法
- 28. 集成测试私有类和方法
- 29. Akka的单元测试私有方法
- 30. 测试私有方法,澄清需要
为什么要这样呢?在测试之前你改变了一些东西,我看不出有什么理由呢? – Nanne 2012-04-13 13:23:07
几乎肯定不是一个好主意;如果你直接测试一个类的内部方法,你应该考虑将它们重构成一个单独的类。 – 2012-04-13 13:24:19
我在私有方法返回单元测试环境中不可用的某些资源的情况下完成了此操作,并且我想测试一些调用它的其他(非私有)方法。通过使其受到保护,我可以覆盖它,以便它返回一些存根/模拟而不是不可用的资源。这意味着一个单元测试变得可行,我还没有找到另一种方法,但它不是理想的。 – 2012-04-13 13:27:23