2009-05-15 2 views
33

Utilizzando Nunit, voglio essere in grado di scrivere un dispositivo di prova che leggerà tutti i nomi di file in una particolare directory e creerà un test per ogni file.Creare dinamicamente test in NUnit

Potrei facilmente scrivere un metodo di prova che analizza la directory e fa tutti i test, ma quando eseguo NUnit voglio poter vedere ciascuno dei test individualmente.

È possibile?

risposta

46

ho trovato un modo che si adatta i miei scopi

Avere un banco di prova, e segnare con la TestCaseSource attributo in questo modo

[Test, TestCaseSource("GetTestCases")] 
public void TestFile(string filename) 
{ 
    //do test 
} 

quindi scrivere i GetTestCases di leggere tutte le nomi di file nella directory

private static string[] GetTestCases() 
{ 
    return GetAllFilesInCurrentDirectory(); 
} 

Poi quando avvio NUnit, ottengo una lista dei test da eseguire (elencato in TestFile).

+0

Bello e semplice. L'attributo è anche abbastanza flessibile, come descritto nella documentazione (riferimento alla v2.5.2) qui: http://nunit.com/index.php?p=testCaseSource&r=2.5.2 –

+0

NUnit rocks !! Ha reso le cose più semplici. Sto usando questa funzionalità per i test di integrazione – AksharRoop

+0

Come farlo funzionare in ReSharper test runner? Mostra errori e fallisce nelle caselle di messaggio invece di visualizzare lo stack nella sessione di test – moudrick

1

Se non si sta per essere l'aggiunta di file in tale directory nel tempo e dispone di una serie di nomi di file di passare come input per una prova generica, provare a utilizzare il RowTest NUnit extension (parte del std distrib posta v2. 4.7) - Sarai in grado di vedere ogni caso di test - inserire la combinazione individualmente nella GUI raggruppata sotto un singolo nodo.

Se state sta per essere l'aggiunta di file in tale directory, mi piacerebbe scrivere un singolo NUnit TestCase che loop su un elenco di file ottenuti in fase di esecuzione e chiama il metodo di test generico con ogni percorsofile. Utilizzare uno collecting parameter per raccogliere i nomi dei file di test in errore - al termine si asserisce. Non saresti in grado di vedere ogni caso di test singolarmente ma avresti un codice di test semplice e leggibile.

Assert.AreEqual(listOfFailedFiles.Length, 0, PrettyPrint(listOfFailedFiles)) 
+0

A meno che non si abbiano migliaia di test .... possono essere necessarie alcune ore. – eocron

0

So che questo è un po 'oscuro, ma in passato ho usato uno script per generare codice per me che posso quindi eseguire come singoli casi di test.