【发布时间】:2011-03-18 23:36:13
【问题描述】:
我是一名初级程序员,我不知道如何编写一个结构良好的应用程序,以便进行单元测试。我想编写能够在之后添加有效单元测试的应用程序。
问题出在private 方法上——它们不能在他们的类之外进行测试。
我是否应该通过将所有private的方法更改为protected来解决这个问题,并让测试类扩展源类?还是有更好的解决方案?
我的解决方案(私有 splitLetters => protected splitLetters)会这样工作:
源类:
class MyClass{
protected splitLetters(int num){
return num+2;
}
}
测试类:
class Test_MyClass extend MyClass{
public splitLettersTest(){
for(int i=0;i<100;i++){
System.println(parent.splitLetters(i));
}
}
}
解决方案:
不测试私有方法 - 有时私有方法正在执行非常复杂的任务,应该很好地进行测试,我们不希望用户可以访问这些方法。很快,解决方案将私有方法更改为受保护的方法。
嵌套类测试方式 - 有问题,因为 QA 会更改源代码
Reflection - 如果这使得调用私有方法成为可能,它看起来是一个很好的解决方案http://www.artima.com/suiterunner/private3.html (我应该学习更多来理解反射。如果我们可以从另一个类调用私有方法,我不明白反射如何不打破拥有公共和私有方法的所有想法。)
未定义私有方法(正如我在我的解决方案中所展示的)- 有问题,因为有时我们必须定义私有方法。
【问题讨论】:
-
很多人会争辩说私有方法不需要测试,只需要公共接口。
-
这个问题已经回答here。
标签: java unit-testing testing junit automated-tests