2013-04-29 19 views
11

Possiamo avere un metodo di configurazione di prova con argomenti? Ho bisogno di un setup diverso per ogni test in un proiettore.Metodo di test di test Nunit con argomento

Abbiamo qualcosa (o modo simile) come ipotetica idea:

[SetUp] 
[Argument("value-1")] 
[Argument("value-2")] 
[Argument("value-3")] 
public void InitializeTest(string value) 
{ 
    //set env var with value 
} 
+0

http://www.nunit.org/index.php?p=parameterizedTests&r= 2.5.5 – Oded

+1

Non è chiaro il motivo per cui provate a parametrizzare * setup * piuttosto che * test *. –

+0

dopo questa configurazione i test fanno lo stesso lavoro. probabilmente ha più senso prendere questo bit nel test e parametrizzare il test! – dushyantp

risposta

17

L'installazione viene eseguita una volta per ogni test e per un test è disponibile solo un setUp e TearDown. È possibile chiamare il metodo di inizializzazione da prove in modo esplicito e quindi creare i test basati sui dati mediante l'attributo TestCase

public void InitializeTest(string value) 
{ 
    //set env var with value 
} 

[TestCase("Value-1")] 
[TestCase("Value-2")] 
[TestCase("Value-3")] 
public void Test(string value) 
{ 
    InitializeTest(value); 

    //Arange 
    //Act 
    //Assert 
} 

Come risultato, si avrà tre prove ciascuna chiamata InitializeTest con parametri diversi

+0

grazie, sembra più ragionevole di come stavo provando. – dushyantp

2

Il metodo di configurazione è usato per fare alcuni lavori pre-test, che dovrebbe includere la preparazione per la prova di come impostazione i valori necessari per il test da eseguire, è possibile impostarli all'interno del metodo di installazione anziché fornire i valori come parametri.

26

può essere fatto utilizzando la Attributo TestFixture con un parametro.

Se tutti i test della classe dipendono dallo stesso parametro, questa è la strada da seguire.

La classe avrà bisogno di un costruttore con lo stesso parametro passato all'attributo TestFixture.

Infissi

See con parametri di analisi su https://github.com/nunit/docs/wiki/TestFixture-Attribute

[TestFixture("Oscar")] 
[TestFixture("Paul")] 
[TestFixture("Peter")] 
public class NameTest 
{ 
    private string _name; 

    public NameTest(string name) 
    { 
     _name = name; 
    } 

    [Test] 
    public void Test_something_that_depends_on_name() 
    { 
     //Todo... 
    } 

    [Test] 
    public void Test_something_that_also_depends_on_name() 
    { 
     //Todo... 
    } 
    //... 
} 

Questo codice è dal sito web di documentazione NUnit:

[TestFixture("hello", "hello", "goodbye")] 
[TestFixture("zip", "zip")] 
[TestFixture(42, 42, 99)] 
public class ParameterizedTestFixture 
{ 
    private readonly string eq1; 
    private readonly string eq2; 
    private readonly string neq; 

    public ParameterizedTestFixture(string eq1, string eq2, string neq) 
    { 
     this.eq1 = eq1; 
     this.eq2 = eq2; 
     this.neq = neq; 
    } 

    public ParameterizedTestFixture(string eq1, string eq2) 
     : this(eq1, eq2, null) 
    { 
    } 

    public ParameterizedTestFixture(int eq1, int eq2, int neq) 
    { 
     this.eq1 = eq1.ToString(); 
     this.eq2 = eq2.ToString(); 
     this.neq = neq.ToString(); 
    } 

    [Test] 
    public void TestEquality() 
    { 
     Assert.AreEqual(eq1, eq2); 
     if (eq1 != null && eq2 != null) 
      Assert.AreEqual(eq1.GetHashCode(), eq2.GetHashCode()); 
    } 

    [Test] 
    public void TestInequality() 
    { 
     Assert.AreNotEqual(eq1, neq); 
     if (eq1 != null && neq != null) 
      Assert.AreNotEqual(eq1.GetHashCode(), neq.GetHashCode()); 
    } 
} 
Problemi correlati