2017-07-14 8 views
1

Iは、次のシグネチャを持つと方法を持って次のようこの場合、すべての可能な入力をユニットテストする必要がありますか?

ConfigTreeNode FilterFirstChild<T>(Func<ConfigTreeNode, T> getProp, T key) 

使い方は次のとおり

MyObj.FilterFirstChild(x => x.Prop1, "foo") //assuiming Prop1 is a string 

発信者がProp1(すなわちProp2Prop3)の代わりに任意のプロパティを使用することができます。

私の質問は、すべての可能なプロパティをカバーする複数の単体テストを書くべきですか?

すなわち

public void FilterFirstChild_GivenChildProp1_ReturnsCorrectChild() 
public void FilterFirstChild_GivenChildProp2_ReturnsCorrectChild() 
public void FilterFirstChild_GivenChildProp3_ReturnsCorrectChild() 

それとも、これは愚かな質問である場合、私はちょうど一般的な作業の動作をテスト1つのテスト

すなわち

public void FilterFirstChild_GivenChildProp_ReturnsCorrectChild() // not prop1, prop2... etc 

謝罪を記述する必要があります。

答えて

5

一般に単体テストの目的は、すべての可能なデータ入力ではなくシナリオ(if条件)をカバーすることです。 Prop1からProp2までの処理に違いがある場合は、両方をカバーすることが理にかなっています。そうでない場合は、ジェネリックテストを残しても問題ありません。

また、単体テストフレームワークには通常、複数のデータセットに対してテストを実行するツールがあることに言及することは重要です。例えば、NUnitTestCaseAttributeを持っています:

[Test] 
[TestCase(SomeEnum.SomeValue)] 
public void MethodName_Condition_ThrowsException(SomeEnum someValue) 
{ 
//... 
} 
関連する問題