次の単体テスト ケースのソリューション/パターンを探しています。
ケース:
それぞれ 1 つのメソッドを持つ 3 つのクラス A、B、C があるとします。A のメソッドは、C のメソッドを呼び出す B のメソッドを呼び出します。つまり、A->B->C です。各メソッドは 1 つの入力 (メソッド A の入力 A、入力 B、入力 C) を取ります。メソッド A の呼び出しの結果の出力は、次のようなツリー構造になります。
ルート (方法 A から作成) -- ノード B (方法 B から作成) -- ノード C1 -- ノード C2 (いずれも方法 C から作成)
私にとって単体テストとは、メソッドの入力からの出力を分離してテストすることです。したがって、上記の各メソッドの単体テストを作成します。テストは分離して記述されるため、メソッド A の単体テストを記述するときはメソッド B をモックし、メソッド B の単体テスト ケースを記述するときはメソッド C をモックします。
これまでのところ、すべて問題ありません。各メソッドの出力に期待値を書き込んで、結果のツリー構造が尊重されるようにすることができます。
問題:
メソッド B を呼び出す別のクラスを追加して、D->B->C という呼び出しチェーンも持つようにします。結果のルート ツリーは次のようになります。
- ルート D
- ノード B
- ノード C1
- ノード C2
- ノード B
開発中に、メソッド A の要件が誤解されており、ツリーの結果が次のようになるはずだったことに誰かが気づきました。
- 根A
- ノード B
- ノード C
- ノード B
幸いなことに、開発者はメソッド C を変更して、出力が 2 つではなく 1 つのノードのみを返すようにします。彼は、それらの変更を反映するように単体テストを変更します。ただし、メソッド D の要件は変更されていないはずであり、そのメソッドの出力にはまだノード C1 とノード C2 が含まれているはずです。
質問:
2 番目の開発者がメソッド D に導入した破壊的変更について警告を受けるようにするには、単体テストをどのように記述しますか? ここで最も適していると思われる統合テストは避けたいと思います。
ありがとう。