依存関係が渡された参照の状態を変更するときに、void メソッドの単体テストと依存関係のモックに問題があります。void メソッドで副作用が観察され、動作も観察される可能性があることは理解していますが、これらのガイドラインをこのコードに適用するのは困難です。同様の質問がありますが、その後のローカルな状態の変更を扱うものは見つかりませんでした。私はJUnitとMockitoを使用しています...これは、私が話しているコードの不自然なバージョンです:
@Mock
MergingObject mergingObject;
@Override
public void process(Foo foo1) {
Foo foo2 = getAnInstanceOfFoo(); // private
Foo foo3 = mergingObject.merge(foo1, foo2); // public
foo1.copySomeValues(foo3);
}
ここでの難問は、MergingObject オブジェクトのモックを作成するかどうかです。merge(...) 操作が呼び出されないため、オブジェクトをモックすると、期待される状態の変化は消えます。merge(...) が foo1 と foo2 の正しいインスタンスで呼び出されたことを確認することはできますが、その後の copySomeValues(...) 呼び出しは引き続き NullPointerException をスローします。
助言がありますか?