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

上一篇 / 下一篇  2012-10-16 09:46:14 / 个人分类:单元测试

51Testing软件测试网r2b+q8V}Z p

  在单元测试用例的开发过程中遇到需要测试私有方法的地方往往会给开发人员带来很大的困扰。

zR({$K7lH?2aB0

3A5W0e[e(q+Z} C M0  在http://blog.developers.ba/post/2009/04/12/Unit-testing-private-methods-yes-or-no.aspx 这篇blog中,博主也提到了类似的问题。

#f6R8uun$kf(q%RY u@051Testing软件测试网BL3}'m6d%U

  1、需要对私有方法进行测试吗?51Testing软件测试网+}Ob$toIP

F5Nz9ivA,YZ0  2、如何测试?是调整私有方法的访问权限或是通过public来测试。51Testing软件测试网Ih~Yu4t E |

/r+T Bi|Oa3?!j0  3、对私有方法进行测试是不是意味着代码中有了bad smell。

E4t'HQ!g.C{0

[,a9jG9R7mt0  4....51Testing软件测试网RB9v(YA9H:\*R

51Testing软件测试网W*Y|1~({t.s!m

  接下来谈谈我的感受吧51Testing软件测试网 Wc{5g I e,v%x:w0C

51Testing软件测试网eG)[JFD

   1、是不是需要对一个方法(无论是public或是private)取决于这个函数的复杂度和价值,并不是所有的function都要测试的,除非需要 追求很高的测试覆盖率。这样的话是否需要对一个private方法进行测试就看这个private方法是不是比较重要、复杂、容易出错,其实这个原则也适 用于Public的方法,你总不会去测试java的setter和getter吧。51Testing软件测试网N~4rP1Y.]/yfr

Inb6T.uw0  2、很多时候private的方法的测试时可以通过对public方法的测试间接来达到的。一个设计良好的、充分运用TDD的工程完全可以通过对public方法提供完整的用例就可以覆盖private方法。51Testing软件测试网j^YL,k*l

51Testing软件测试网,Lq3F!d/Rcy

  3、仅仅为了能够进行单元测试,而采用将private方法改成public方法通常是不合适的,这样会暴露出不该暴露的实现细节,另外接口过多也破坏了SRP(单一职责原则)。

4c7W3F-fY%Q0

l [q9hb8t0  4、当你非常渴望测试一个private方法的时候,可以仔细评估这个private方法和目前所在类的关系,这样的private方法是不是应该迁移到另一个类中,在另一个类中作为public提供接口给调用方(我通常这么干)。51Testing软件测试网*~m9O\/V"p_4Oq IM

51Testing软件测试网 ^~pN*QD

  5、最后一个测试private的途径就是利用语言提供的反射功能,在testcase中将private方法修改成public的,以此来实现对private方法的测试。

^9RS\,FrSM0

TAG:

 

评分:0

我来说两句

Open Toolbar