はい、それは可能です。秘訣は、ユニットクラスのテスト階層をコードのクラス階層に従わせることです。
Itf
クラスC1
とを実装するインターフェースがあると仮定しましょうC2
。
Itf
まず、 ( )のテストクラスを作成しますItfTest
。実際にテストを実行するには、Itf
インターフェイスのモック実装を作成する必要があります。
この中のすべてのテストは、 (!)ItfTest
の実装に合格する必要があります。Itf
そうでない場合、実装はリスコフの置換原則(Martinのオブジェクト指向設計のSOLID原則 の「L」)に準拠していません。
したがって、のテストケースを作成するためC1
に、C1Test
クラスはを拡張できますItfTest
。拡張機能は、モックオブジェクトの作成をオブジェクトの作成に置き換える必要がありC1
ます(オブジェクトを挿入するか、GoFファクトリメソッドを使用します)。このようにして、すべてのItfTest
ケースがタイプのインスタンスに適用されますC1
。さらに、C1Test
クラスには、に固有の追加のテストケースを含めることができますC1
。
同様にC2
。そして、より深いネストされたクラスとインターフェースに対してこのトリックを繰り返すことができます。
参照:BinderのPolymorphic Server Testパターン、およびMcGregorのPACT-コンポーネントテスト用の並列アーキテクチャ。