2012-04-24 13 views
7

Sto usando NUnit. Ho il mio metodo di prova definito likeso:NUnit. Passaggio dei parametri nel metodo di teardown

[Test] 
[TestCase("Fred", "Bloggs")] 
[TestCase("Joe", "Smith")] 
public void MyUnitTest(string firstName, string lastName) 
{ 
    ... 
} 

Dopo un TestCase è terminata, si va nel metodo tearDown. Che cosa si vuole fare, è avere quei parametri di TestCase che vengono passati nel metodo di test ma anche passati al metodo TearDown.

Qualcosa di simile a questo:

[TearDown] 
public void TearDown(string firstName, string lastName) 
{ 
    ... 
} 

spero che NUnit supporta questa out-of-the-box. Altrimenti, ho bisogno di scrivere codice su misura nel metodo di test per archiviare i dati di test in una raccolta. Quindi quella raccolta viene utilizzata nel metodo TearDown.

Se qualcuno ha qualche idea .. sarebbe fantastico! Grazie. Christian

risposta

9

TearDown e SetUp vengono eseguiti per ciascuna delle prove in test. Considerate avete seguenti test:

[TestCase("Joe", "Smith")] 
public void Test1(string firstName, string lastName) { ... } 

[Test] 
public void Test2() { ... } 

[TestCase(10)] 
public void Test3(int value) { ... } 

Cosa ci si aspetta la firma del metodo tearDown?

Quindi, la risposta è no. NUnit non fornisce il modo predefinito per passare il parametro di prova al metodo TearDown. E penso che non lo farà. È necessario aggiungere questa funzionalità manualmente.

+0

Ho pensato che NUnit non l'ha supportato dopo molto Google. Ma grazie per la tua risposta. Sempre buono da controllare. –

4

In realtà, questo è possibile.

Se si fa riferimento a TestContext.CurrentContext.Test.Name nel TearDown, è possibile ottenere la firma del metodo completo contenente i parametri che sono stati passati in esso. Dovrai analizzarlo, ma è lì.

2

È possibile fare riferimento ai parametri del test direttamente da TestContext nella funzione TearDown.

Qualcosa di simile.

[Test] 
[TestCase("Fred", "Bloggs")] 
[TestCase("Joe", "Smith")] 
public void MyUnitTest(string firstName, string lastName) 
{ 
} 

[TearDown] 
public void TearDown() 
{ 
    string firstName = TestContext.CurrentContext.Test.Arguments[0] as string; 
    string lastName = TestContext.CurrentContext.Test.Arguments[1] as string; 
} 

Va notato che TestContext.CurrentContext.Test.Arguments è solo un array oggetto e sarebbe chiamato ad ogni prova la TestFixture indipendentemente dalle singole segnature così dovremmo essere attenti a garantire trattiamo tutti i valori possibili in Arguments[] ma certamente è possibile fare riferimento a questi oggetti nella funzione TearDown

+0

+1. ** Nota: ** se qualcuno sta per utilizzare l'approccio di risposta, la versione di NUnit deve essere controllata_ - la matrice di 'Arguments' è disponibile da [v3.7] (https://github.com/nunit/nunit/tirare/2096), – Serg

Problemi correlati