2009-10-20 16 views
25

Abbiamo alcuni test di integrazione nella nostra soluzione. Per eseguire questi test, il software di simulazione deve essere installato sul PC di sviluppo. Questo software tuttavia non è installato su tutti i PC di sviluppo. Se il software di simulazione non è installato, questi test dovrebbero essere saltati altrimenti ==> NullRefException.Ignora test o TestFixture in base alle condizioni

Ora sto cercando un modo per eseguire una "ignorazione condizionale" per test/testfix. Qualcosa come

se (simulationFilesExist) do TestFixture altro saltare TestFixture

NUnit dare alcune cose utili come ignorare e esplicito, ma che non è tranquillo quello che mi serve.

Grazie

risposta

39

Usa qualche codice nel tuo test o dispositivo impostate metodo che rileva se il software di simulazione è installato o non e chiama Assert.Ignore() se non lo è.

[SetUp] 
public void TestSetUp() 
{ 
    if (!TestHelper.SimulationFilesExist()) 
    { 
     Assert.Ignore("Simulation files are not installed. Omitting."); 
    } 
} 

o

[TestFixtureSetUp] 
public void FixtureSetUp() 
{ 
    if (!TestHelper.SimulationFilesExist()) 
    { 
     Assert.Ignore("Simulation files are not installed. Omitting fixture."); 
    } 
} 
+0

Grazie per la rapida risposta! Ma questo si tradurrà in un test fallito, non proprio quello che voglio. Il fatto che il test non sia stato eseguito non significa che dovrebbe indicare un errore (nel mio caso). –

+3

No. Assert.Fail comporterà un test fallito. Assert.Ignore() fa esattamente quello che vuoi che faccia. Fa sì che il test venga ignorato in fase di esecuzione. Citando dai documenti: "Il metodo Assert.Ignore ti dà la possibilità di causare dinamicamente un test o una suite da ignorare in fase di esecuzione." – tvanfosson

+0

Hai ragione tvanfosson. Quando si esegue solo il testfixture verrà indicato un errore, ma quando si esegue un gruppo di testfix tutti insieme, il testfixture verrà omesso e il risultato finale sarà SUCCESSO !! Molte grazie. –

6

NUnit ti dà anche la possibilità di fornire un attributo categoria. A seconda di come si stanno avviando i test, potrebbe essere opportuno contrassegnare tutti i test che richiedono il simulatore con una categoria nota (ad es. [Category ("RequiresSimulationSoftware")]). Quindi dal NUnit Gui puoi scegliere di escludere alcune categorie. Puoi fare la stessa cosa dal comando NUnit dalla riga di comando (specificare/escludere: RequiresSimulationSoftware se applicabile).

Spero che questo (o la risposta precedente di tvanfosson) aiuti.

+1

Ehi, ho pensato a questa soluzione. Il lato negativo di questa soluzione è che è specifico del chiamante. A volte eseguiamo i test da VStudio e l'altra da uno script. Entrambi dovrebbero essere modificati e mantenuti. –

+0

+1. Mi piace molto più di "Assert.Ignore", perché nel mio caso è solo l'attributo e il flag aggiuntivo a CLI. –

1
[SetUp] 
public void TestSetUp() 
{ 
    if (!TestHelper.SimulationFilesExist()) 
    { 
     Assert.Ignore("Simulation files are not installed. Omitting."); 
    } 
} 

si utilizza questo tipo di condizione in TestFixtureSet Attribute. Ma se questo dispositivo ha un test parametrizzato, allora se vuoi ignorare il test parametrizzato di questo dispositivo, allora questo va in loop infinito e il tuo test sarà impiccato. Quindi usi meglio l'attributo setup per la condizione if.

Problemi correlati