测试private方法

   写一个标记关键词的小程序,想测试一下标记关键词的方法。这个类有一个private方法

 

private String tokenize(inputString,List<keyword));

 

通过这个方法,把关键词给标记出来。一个public会检查这个返回的String,然后把每个关键词封装到Token类中。

   于是,需要写一个测试段测试这个private方法是否正确的实现了,先不说这个类的设计究竟好不好。看了一篇帖子,有一个回复是这样的

 

The best way to test a private method is via another public method. If this cannot be done, then one of the following conditions is true:

The private method is dead code

There is a design smell near the class that you are testing

The method that you are trying to test should not be private

 

意思就是这个设计不怎么样,好的设计不应该需要测试一个private方法。也的确,private方法是多变的,测试用例很可能过一段时间就失效了。但从另一方面,测试public依赖的private方法可以减少测试的成本,如果public出错,可以用测试用例检查依赖private的结果是否正确。在那篇帖子的后面还有一个回复

 

 If your private method is complex enough to warrant independent unit testing, then it's complex enough to have its own class. The class can be internal of course (i.e. not accessible from other packages). 

 

意思就是说如果一个private方法复杂到需要测试来保证质量,那么可以考虑为这个private方法实现一个自己的类。这个类可以是package作用域的。对于这个问题,每个人都有每个人的想法。为一个简单的算法去重写一个新的类是否值得需要看具体的环境。

 

言归正传,测试private方法大家都可以想的出来。有三种方法:

1. 修改作用域,使其可以从外部测试

2. 使用一个inner类来测试

3. 使用反射的方式来测试

 

   前两者都不必说,需要修改实现代码,感觉就不是特别好。对于使用反射,有一种说法,和前边差不多,其他的开发人员如果修改了实现,那么反射测试就会失败。基于反射的测试工具是有的,比如一些Mock测试工具等。个人觉得,如果是小团队开发,测试private方法是比较快捷的,因为不用管理太多的类。对于大团队的话,还是分散点,多点类吧。这是我深深的总结。

 

附参考帖子:http://stackoverflow.com/questions/34571/whats-the-best-way-of-unit-testing-private-methods

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值