トップレベルクラスの JUnit テストに取り組む最善の方法について質問があります。String を再フォーマットしてストリームに書き込むメソッドを持つクラス SomeWriter があるとします。メソッドは実際に作業を行うのではなく、実際に実際の作業を行うメンバー オブジェクトに委任します。これを以下のクラスにまとめました。
public class SomeWriter {
public void writeReformattedDataToStream(OutputStream outStream, String message) {
myReformatter.DoTheActualWorkAndWriteDataToStream(outStream, message);
}
}
この架空の例では、myReformatter クラスの単体テストを既に作成しており、myReformatter が機能することを実証しました。私の質問は、SomeWriter の writeReformattedDataToStream の単体テストにどのように取り組むべきですか?
ブラック ボックス テストを行う場合は、myReformatter クラスに適用したのと同じテストを作成する必要があります。タスクの実装方法がわからないからです。ただし、単体テストは実際にはホワイト ボックス テストであるため、myReformatter が正しく呼び出されていることを確認するだけのテストには有効でしょうか?
肝心なのは、writeReformattedDataToStream のテストで myReformatter のテストを効果的に繰り返すべきか、それとも myReformatter をモックして正しく呼び出されているかを確認するべきかということです。
これはJUnit Test - Class invokes methods in other class に似ていると思います