2011-09-17 8 views
13

ユニットテストのサブクラスを最適にする方法は何ですか?私がすでにテストを書いた基本クラスがあるとします。パブリックメソッドや保護されたメソッドで親の動作のいくつかをオーバーライドするいくつかのサブクラスがあります。テストサブクラスをユニット化する方法

私のサブクラスのテストクラスは、ベースクラスのすべてのテストが適用されるように、自分のサブクラスのテストクラスを拡張して(必要に応じてテストメソッドをオーバーライドする)べきですか?そうしないと、テストコードが繰り返されることが予想されます。

答えて

9

Liskov substitution principleによれば、サブクラスのインスタンスは、基本クラスと同じプロパティを示し、したがって同じユニットテストをパスします(すべて?)。

それぞれのサブクラスの基本クラスのテストを実行することになりました。これはtest helperで実現できます。

はい、テストクラスのサブクラス化は、単体テストの重複を避けるための良い方法です。 Testcase superclassパターンを見てください。

+0

Liskovサブディションの原則がどのように適用されるかについてのあなたの主張は間違っています。サブクラスのメソッドは、基底の単体テストのすべてを渡す必要はありません。それ以外の場合、それらは振る舞いは同じです。どの場合、基本メソッドをオーバーライドするのがポイントですか? –

+5

Liskov原則の元の転記は正しいです。サブクラスは、スーパークラスのすべての単体テストを渡す必要があります。追加のテストは、サブクラスの追加された機能を反映します。もちろん、Liskovに違反するような方法でメソッドをオーバーライドすることもできます。この場合、関連する単体テストは失敗します。 – ComDubh

6

例はありませんが、一組のテストで基本クラスをテストしてから、そのサブクラスの新しいテストを作成し、異なる動作をテストするだけです。

関連する問題