2009-05-15 10 views
33

Mit Nunit möchte ich in der Lage sein, eine Testvorrichtung zu schreiben, die alle Dateinamen in einem bestimmten Verzeichnis liest und für jede Datei einen Test erstellt.Dynamische Erstellung von Tests in NUnit

Ich könnte ganz einfach eine Testmethode schreiben, die das Verzeichnis durchsucht und alle Tests durchführt, aber wenn ich NUnit starte, möchte ich jeden einzelnen Test einzeln sehen können.

Ist das überhaupt möglich?

Antwort

46

Ich habe einen Weg gefunden, meine Zwecke

Haben Sie einen Testfall paßt, und es mit dem TestCaseSource wie so Attribut markiert

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

dann das GetTestCases schreiben alle lesen Dateinamen im Verzeichnis

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

Dann, wenn ich NUnit starten erhalte ich eine Liste der Tests zu sein run (aufgelistet unter TestFile).

+0

Schön und einfach. Das Attribut ist auch ziemlich flexibel, wie in der Dokumentation beschrieben (bezieht sich auf v2.5.2) hier: http://nunit.com/index.php?p=testCaseSource&r=2.5.2 –

+0

NUnit rockt !! Es machte die Dinge einfacher. Ich verwende diese Funktion für Integrationstests – AksharRoop

+0

Wie funktioniert es im ReSharper Test Runner? Es zeigt Fehler und schlägt in Meldungsfeldern fehl, statt Stack in Testsitzung anzuzeigen – moudrick

1

Wenn Sie nicht Dateien gehen werden, indem Sie in das Verzeichnis über die Zeit und haben eine Reihe von Dateinamen als Eingabe in einen allgemeinen Test bestehen in, versuchen Sie den RowTest NUnit extension (einen Teil des Stiftes v2 std distrib verwenden. 4.7) - Sie können jeden Testfall sehen - Eingabekombination einzeln in der GUI unter einem Knoten gruppiert.

Wenn Sie Dateien zu diesem Verzeichnis hinzufügen werden, würde ich ein einzelnes NUnit TestCase schreiben, das eine Liste von Dateien zur Laufzeit durchläuft und die generische Testmethode für jeden Dateipfad aufruft. Verwenden Sie eine collecting parameter, um fehlerhafte Testdateinamen zu sammeln - am Ende bestätigen Sie. Sie könnten nicht jeden Testfall einzeln sehen, aber Sie hätten einen einfachen Testcode.

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

Es sei denn, Sie haben Tausende von Tests .... es kann einige Stunden dauern. – eocron

0

Ich weiß, das ist ein wenig unklar, aber ich habe in der Vergangenheit ein Skript verwendet, um Code für mich zu generieren, den ich dann als einzelne Testfälle ausführen kann.