単体テストについてはthis answerラッパーメソッドを読んでいます。次のコードで:それは私がmethodB()
のすべての機能が、単なるテストmethodB()
がすでにテストする必要がありますのでarg
がnullではないです2例をテストする必要がないことを合理的に見える基本メソッドがプライベートの場合の単体テストラッパーメソッド
public static Object methodA(Object arg) {
if (arg == null) {
return null;
} else {
return methodB();
}
}
。 methodB()
がプライベート方法であれば
しかし、私はanother answerによると、プライベートメソッドは実装の詳細なので、methodB()
が提供するすべての機能をテストする必要があります。
public static MyObject methodA1(int x) {
MyObject obj = new MyObject();
obj.setX(x);
return methodB(obj);
}
public static MyObject methodA2(int y) {
MyObject obj = new MyObject();
obj.setY(y);
return methodB(obj);
}
private static MyObject methodB(MyObject obj) {
// doSomething with obj
return obj;
}
私は別にmethodA1()
とmethodA2()
をテストする必要があります:私は2つの方法methodA1()
とmethodA2()
を持っており、それらはすべて、このような呼び出しmethodB()
場合
問題は、ありますか? methodA1()
とmethodA2()
がmethodB()
の単なるラッパー・メソッドなので、methodB()
が正しくテストされている場合、私は全くmethodA1()
とmethodA2()
をテストする必要はありませんので、または私はちょうどプライベートメソッドmethodB()
をテストすることができます。
編集:
パブリックメソッドのテストは、最初に書きました。しかし、問題は、methodA
のバリエーションが多数あり、その中にいくつかの機能/要件が共有されている場合、テストケースのコードが複製されることです。だから私はプライベートメソッドmethodB()
をテストすべきかどうか疑問に思っています。
私が実際に遭遇した問題は、データベースにレコードを追加するという要件があり、提供すべきさまざまなAPIがたくさんあることです。
MyObject addMale(String name, String job); // fill sex with "Male"
MyObject addStudent(String name, String sex); // fill job with "Student"
を、それらのすべては、パラメータが有効であるかどうかチェックし、指定されたし、実際にそうであるデータベースの中にレコードを挿入するためにプライベートメソッドを呼び出していないフィールドを入力します。たとえば、私が提供しなければなりませんmethodB()
と呼ばれます。
このようなAPIがたくさんあるので、すべてのフィールドの状況でmethodB()
しかテストできない場合は、おそらく私はテストケースの重複を減らすことができますが、このようなユニットテストを行うのは良い方法ですか?
EDIT2:
私は、私は私の他のテストケースで反射を使用するので、私はプライベートメソッドをテストすることができます知っている、と私はそれがあまりにも、プライベートメソッドを呼び出すことができます知っています。しかし、私の質問は、この状況では、プライベートメソッドをテストすることが適切な解決策であるかどうかです。
'methodA1'が' methodA2'と異なる何かをする場合、明らかに別のテストが必要です。両方のメソッドが同じことをする場合は、1つのメソッドだけが必要です。 – AJNeufeld
ビットを展開する: 'methodA1'はオブジェクトに** setX' **を呼び出し、' methodB'に渡します。ここで 'methodA2'はオブジェクトに対して** setY' **を呼び出し、' methodB'に渡します。 。 'methodB'の動作は、オブジェクトの' X'がセットされているのか、 'Y'がセットされているのかによって異なります。どちらもテストする必要があります。 'methodB'をテストしたばかりの場合は、どちらの場合でもテストケースを記述する必要があります。 A1とA2の両方のテストケースを記述することで、明らかにすることもできます。 – AJNeufeld
単体テストのコードカバレッジ解析を実行すると、 'methodA'と' methodA2'の単体テストを 'methodB'の代わりに実行した方が、カバレッジが向上します。 – AJNeufeld