在单元测试中如何测试私有方法

转自:http://hi.baidu.com/dearhwj/item/a9901bdbf8f527ed3cc2cb0b

在单元测试中如何测试私有方法

由于博客搬家到了http://www.daniel-journey.com/ 该文章页被搬到新的地址http://www.daniel-journey.com/archives/185

   在单元测试用例的开发过程中遇到需要测试私有方法的地方往往会给开发人员带来很大的困扰。
在http://blog.developers.ba/post/2009/04/12/Unit-testing-private-methods-yes-or-no.aspx 这篇blog中,博主也提到了类似的问题。
1. 需要对私有方法进行测试吗?
2. 如何测试?是调整私有方法的访问权限或是通过public来测试。
3. 对私有方法进行测试是不是意味着代码中有了bad smell。
4....
接下来谈谈我的感受吧
1. 是不是需要对一个方法(无论是public或是private)取决于这个函数的复杂度和价值,并不是所有的function都要测试的,除非需要追求很高的测试覆盖率。这样的话是否需要对一个private方法进行测试就看这个private方法是不是比较重要、复杂、容易出错,其实这个原则也适用于Public的方法,你总不会去测试java的setter和getter吧。
2. 很多时候private的方法的测试时可以通过对public方法的测试间接来达到的。一个设计良好的、充分运用TDD的工程完全可以通过对public方法提供完整的用例就可以覆盖private方法。
3. 仅仅为了能够进行单元测试,而采用将private方法改成public方法通常是不合适的,这样会暴露出不该暴露的实现细节,另外接口过多也破坏了SRP(单一职责原则)。
4. 当你非常渴望测试一个private方法的时候,可以仔细评估这个private方法和目前所在类的关系,这样的private方法是不是应该迁移到另一个类中,在另一个类中作为public提供接口给调用方(我通常这么干)。
5. 最后一个测试private的途径就是利用语言提供的反射功能,在testcase中将private方法修改成public的,以此来实现对private方法的测试。

参考资料

Testing private methods, TDD and Test-Driven Refactoring

Unit testing private methods yes or no?

Using Reflection in Unit Tests


你可能感兴趣的:(junit)