2009-10-23 5 views
12

J'ai une unité de test qui teste une variété de cas, comme celui-ci:NUnit et TestCaseAttribute, jointure croisée de paramètres possible?

public void Test1(Int32 a, Int32 b, Int32 c) 

Disons que je veux créer code de test sans une boucle, donc je veux utiliser TestCase pour spécifier les paramètres comme ceci:

[TestCase(1, 1, 1)] 
public void Test1(Int32 a, Int32 b, Int32 c) 

est-il possible pour moi avec cet attribut pour dire ceci:

  • pour le premier paramètre, voici un ensemble de valeurs
  • Pour le second paramètre, voici un ensemble de valeurs
  • Pour le troisième paramètre, voici un ensemble de valeurs
  • Maintenant, tester toutes les combinaisons des ci-dessus

Ie. Quelque chose comme ceci:

[TestCase(new[] { 1, 2, 3, 4 }, new[] { 1, 2, 3, 4 }, new[] { 1, 2, 3, 4 })] 
public void Test1(Int32 a, Int32 b, Int32 c) 

Ne semble pas comme ça, mais peut-être que je donne sur quelque chose?

Répondre

13

NUnit fournit l'attribut Values qui peut être utilisé conjointement avec Combinatorial attribut pour y parvenir:

[Test, Combinatorial] 
public void Test1( 
    [Values(1,2,3,4)] Int32 a, 
    [Values(1,2,3,4)] Int32 b, 
    [Values(1,2,3,4)] Int32 c 
) 
{ 
    ... 
} 
+0

Cela a fonctionné, et combinatoires est apparemment la valeur par défaut et, IntelliSense doc a dit que, et j'ai essayé sans cela particulier attribut et cela a fonctionné exactement comme vous l'avez dit. Merci beaucoup. –

+1

@ LasseV.Karlsen En plus de l'attribut 'Values', l'attribut [' Range'] (http://www.nunit.org/index.php?p=range&r=2.5) peut également être utilisé de la même manière . Au lieu de répertorier explicitement toutes les valeurs, elles peuvent être spécifiées en tant que plage. Ainsi, dans votre exemple, au lieu de '[Values ​​(1,2,3,4)]', vous pouvez remplacer par [[Range (1,4,1)] '. –

Questions connexes