私はJavaでクラスを持っています。これには、デフォルト値を計算するためのプライベートメソッドがあります。そのうちの 1 つはその値を省略し、プライベート メソッドを使用してデフォルトを取得します。
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;
}
}
今、私はこのクラスのテストを書き込もうとしており、両方のコンストラクターをテストしたいと考えています。2 番目のコンストラクターにはデフォルト値が渡されます。
さて、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 を除いて全員をプライベートとしてマークすることによって)。