2017-07-14 2 views
1

I ont une méthode avec la signature suivante:Dois-je tester toutes les entrées possibles dans ce cas?

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

L'utilisation est la suivante:

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

L'appelant peut utiliser toute propriété à la place de Prop1 (i.e. Prop2, Prop3). Maintenant, ma question est que je devrais écrire plusieurs tests unitaires couvrant toutes les propriétés possibles?

i.e.

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

Ou devrais-je simplement écrire un test qui teste le comportement de travail général

i.e.

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

Toutes mes excuses si cela est une question idiote.

Répondre

5

En général, les tests unitaires visent à couvrir des scénarios (c'est-à-dire des conditions de cas), et non toutes les entrées de données possibles. S'il y a une différence entre le traitement Prop1 de Prop2, il est donc logique de couvrir les deux. Si non - laisser le test générique est correct.

Il convient également de mentionner que les frameworks de tests unitaires ont généralement un outil pour exécuter des tests sur plusieurs jeux de données. Par exemple NUnit a TestCaseAttribute:

[Test] 
[TestCase(SomeEnum.SomeValue)] 
public void MethodName_Condition_ThrowsException(SomeEnum someValue) 
{ 
//... 
}