2009-10-20 9 views
25

Wir haben einige Integrationstests in unserer Lösung. Um diese Tests durchführen zu können, muss auf dem Entwickler-PC Simulationssoftware installiert sein. Diese Software ist jedoch nicht auf jedem Entwickler-PC installiert. Wenn die Simulationssoftware nicht installiert ist, sollten diese Tests übersprungen werden, andernfalls ==> NullRefException.Ignore Test oder TestFixture basierend auf Bedingung

Ich suche jetzt nach einer Möglichkeit, eine "Conditional Ignore" für Tests/Testfixtures zu machen. So etwas wie

if (simulationFilesExist) tun TestFixture sonst TestFixture

NUnit einige nützliche Dinge geben wie zu ignorieren und explizite überspringen aber das ist nicht ruhig, was ich brauche.

Dank

Antwort

39

Verwenden einige Code in Ihrem Test oder Befestigungs einrichten Methode, wenn die Simulationssoftware erkennt installiert ist oder nicht und ruft Assert.Ignore(), wenn dies nicht der Fall.

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

oder

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

Danke für die schnelle Antwort! Aber das wird zu einem fehlgeschlagenen Test führen, nicht wirklich, was ich will. Die Tatsache, dass der Test nicht ausgeführt wurde, bedeutet nicht, dass er fehlgeschlagen ist (in meinem Fall). –

+3

Nein. Assert.Fail führt zu einem fehlgeschlagenen Test. Assert.Ignore() macht genau das, was Sie tun wollen. Dies führt dazu, dass der Test zur Laufzeit ignoriert wird. Zitat aus der Dokumentation: "Die Assert.Ignore-Methode bietet Ihnen die Möglichkeit, dynamisch zu verursachen, dass ein Test oder eine Suite zur Laufzeit ignoriert wird." – tvanfosson

+0

Sie haben Recht Tvanfosson. Wenn Sie die Testvorrichtung nur ausführen, wird dies als fehlgeschlagen angezeigt, aber wenn Sie eine Reihe von Testverbindungen alle zusammen ausführen, wird die Testvorrichtung weggelassen und das Endergebnis ist ERFOLGREICH !! Danke vielmals. –

6

NUnit gibt Ihnen auch die Möglichkeit, eine Kategorie-Attribut zu liefern. Je nachdem, wie Sie Ihre Tests starten, kann es angezeigt sein, alle Tests zu kennzeichnen, die den Simulator mit einer bekannten Kategorie erfordern (z. B. [Category ("RequiresSimulationSoftware")]). Dann können Sie vom NUnit Gui aus bestimmte Kategorien ausschließen. Sie können dasselbe über den NUnit-Befehlszeilen-Runner tun (spezifizieren/ausschließen: RequiresSimulationSoftware, falls zutreffend).

Hoffe das (oder die vorherige Antwort von Tvanfosson) hilft.

+1

Hey, ich dachte an diese Lösung. Der Nachteil dieser Lösung ist, dass sie aufruferspezifisch ist. Wir führen die Tests manchmal von VStudio aus und das andere Mal von einem Skript aus. Beides sollte geändert und beibehalten werden. –

+0

+1. Ich mag es viel mehr als "Assert.Ignore", weil es nur Attribut und zusätzliche Flag für CLI in meinem Fall ist. –

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

Sie nutzen diese Art der Bedingung in TestFixtureSet Attribute. Aber wenn diese Vorrichtung parametrisierten Test hat, wenn Sie parametrisierten Test dieser Befestigung dann ignorieren möchten, geht dieser in Endlosschleife und Ihr Test wird gehängt. Daher verwenden Sie das Setup-Attribut besser für if-Bedingung.

Verwandte Themen