2009-10-23 10 views
12

Tengo una unidad de prueba que pone a prueba una variedad de casos, así:NUnit y TestCaseAttribute, ¿es posible la combinación cruzada de parámetros?

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

Digamos que quiero crear prueba de código sin un bucle, por lo que quiero usar TestCase para especificar parámetros como la siguiente:

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

¿es posible para mí con este atributo a decir esto:

  • para el primer parámetro, aquí hay un conjunto de valores
  • para el segundo parámetro, aquí hay un conjunto de valores
  • Para el tercer parámetro, aquí es un conjunto de valores
  • Ahora, prueba todas las combinaciones de las anteriores

Ie. algo como esto:

[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) 

no parece gusta, pero tal vez estoy pasando por alto algo?

Respuesta

13

NUnit proporciona el atributo Values que se puede utilizar junto con Combinatorial atributo para lograrlo:

[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

que funcionaba, y la combinatoria es al parecer el defecto así, doc intelisense dijo eso, y trató sin ese particular, atributo y funcionó exactamente como dijiste que lo haría. Gracias un montón. –

+1

@ LasseV.Karlsen Además del atributo 'Values', el atributo [' Range'] (http://www.nunit.org/index.php?p=range&r=2.5) también se puede usar de la misma manera . En lugar de enumerar explícitamente todos los valores, se pueden especificar como un rango. Entonces, en su ejemplo, en lugar de '[Values ​​(1,2,3,4)]', puede sustituir con '[Range (1,4,1)]'. –

Cuestiones relacionadas