2009-10-23 7 views
12

Ho un'unità di test che mette alla prova una varietà di casi, come questo:NUnit e TestCaseAttribute, cross-join dei parametri possibili?

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

Diciamo che voglio creare test-codice senza un ciclo, quindi voglio usare TestCase per specificare i parametri di questo tipo:

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

E 'possibile per me con questo attributo per dire questo:

  • per il primo parametro, ecco una serie di valori
  • Per il secondo parametro, ecco una serie di valori
  • Per il terzo parametro, ecco una serie di valori
  • Ora, prova tutte le combinazioni di quanto sopra

Ie. qualcosa di simile:

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

Non sembra, ma forse sto trascurando qualcosa?

risposta

13

NUnit fornisce l'attributo Values che può essere usato insieme con attributo Combinatorial per ottenere questo:

[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

di efficace, e combinatoria è apparentemente il difetto pure, intellisense doc detto, e ho cercato senza quel particolare attributo e ha funzionato esattamente come hai detto tu. Grazie mille. –

+1

@ LasseV.Karlsen Oltre all'attributo 'Values', anche l'attributo [' Range'] (http://www.nunit.org/index.php?p=range&r=2.5) può essere utilizzato allo stesso modo . Invece di elencare esplicitamente tutti i valori, possono essere specificati come intervallo. Quindi, nel tuo esempio, invece di '[Valori (1,2,3,4)]', puoi sostituire con '[Intervallo (1,4,1)]'. –