Possible Duplicate: What’s the best way of unit testing private methods?
我是一名初级程序员,我不知道如何编写一个结构良好的应用程序,以便进行单元测试。我想编写能够在之后添加有效单元测试的应用程序。
问题在于 private
方法 - 它们无法在其类之外进行测试。
我是否应该通过将所有 private
的方法更改为 protected
来解决这个问题,并让测试类扩展源类?还是有更好的解决方案?
我的解决方案(私有(private) 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));
}
}
}
解决方案:
不测试私有(private)方法 - 有时私有(private)方法正在执行非常复杂的任务,应该很好地测试,我们不希望用户可以访问这些方法。很快,解决方案将私有(private)方法更改为 protected 方法。
嵌套类的测试方式 - 有问题,因为 QA 会更改源代码
反射 - 如果这样可以调用私有(private)方法,它看起来是一个很好的解决方案 http://www.artima.com/suiterunner/private3.html (我应该学习更多来理解反射。如果我们可以从另一个类调用私有(private)方法,我不明白反射如何不打破拥有公共(public)和私有(private)方法的所有想法。)
不定义私有(private)方法(正如我在我的解决方案中展示的那样) - 有问题,因为有时我们必须定义私有(private)方法。
最佳答案
您应该不需要测试私有(private)方法。
- 私有(private)方法是具体实现的一部分。您不应该测试实现,而应该测试功能。如果您测试一个类公开的功能,您可以根据单元测试更改实现。
- 如果您觉得需要测试私有(private)方法,这是一个很好的迹象,您应该将私有(private)方法移至另一个类并公开该方法。通过这样做,您可以获得更小的类,并且可以轻松地测试这些方法。如果您不想公开这个新类,可以将其设为包私有(private)(默认访问修饰符)。
关于java - 我应该如何在 Java 中测试私有(private)方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3299405/