我正在使用JunitTesting测试一个类似于下面示例的类。
public RandomObject MainMethod(int id) {
RandomObject o = dBconn.getRandomObject(id);
subMethod(o);
//also calling other private methods here
return o;
}
private subMethod(RandomObject o) {
//Do something random here
}
我有三个选择:
什么是最佳做法?
答案 0 :(得分:1)
执行JUnit测试时的最佳做法是在与您正在测试的类相同的包下编写JUnit测试。如果您这样做,您可以使用package
可见性保持您的方法,并仍然测试它们。如果未指定private
,protected
或public
等可见性修饰符,则包可见性是方法的默认可见性。
答案 1 :(得分:1)
我想到了一些选择。
我曾参与过使用实用程序方法的项目,以便通过反射执行私有方法是首选。
在其他项目中,我发现某些开发人员将subMethod的访问修饰符更改为protected。然后,在测试类中,定义内部类继承您正在测试的类。然后,此外观可以定义您可以在测试中调用的公共方法。类似的东西:
private class RandomObjectFacade extends RandomObject {
public void subMethodFacade(RandomObject o){
super.subMethod(o);
}
}
这取决于你认为最好的。无论您是想忍受反射的脆弱/性能损失还是对现有代码进行小的,侵入性的更改 - 更改访问修饰符可能不适合您的场景。