我在 Java 中有一个类,它有一个用于计算一些默认值的私有方法;和两个构造函数,其中一个省略了该值并使用私有方法获取默认值。
public class C {
private static HelperABC getDefaultABC() {
return something; // this is a very complicated code
}
public C() {
return C(getDefaultABC());
}
public C(HelperABC abc) {
_abc = abc;
}
}
现在,我正在尝试为这个类编写一个测试,并且想测试两个构造函数;第二个构造函数被传递默认值。
现在,如果getDefaultABC()
是公开的,那将是微不足道的:
// We are inside class test_C
// Assume that test_obj_C() method correctly tests the object of class C
C obj1 = new C();
test_obj_C(obj1);
HelperABC abc = C.getDefaultABC();
C obj2 = new C(abc);
test_obj_C(obj2);
但是,由于getDefaultABC()
是私有的,我不能从测试类中调用它!!!。
所以,我不得不写一些愚蠢的东西:
// Assume that test_obj_C() method correctly tests the object of class C
C obj1 = new C();
test_obj_C(obj1);
// here we will insert 20 lines of code
// that are fully copied and pasted from C.getDefaultABC()
// - and if we ever change that method, the test breaks.
// In the end we end up with "HelperABC abc" variable
C obj2 = new C(abc);
test_obj_C(obj2);
除了简单地将方法从私有更改为公共之外,有没有办法解决这个难题(理想情况下,以某种方式将C.getDefaultABC()
除类 test_C 之外的每个人都标记为私有)?