2009-09-24 5 views

Antwort

2

klingt wie eine gefährliche Idee, es sei denn es ist ein Integrationstest, mit sagen, Daten zu entfernen sagen. Warum nicht im Test selbst machen?

Offensichtlich könnte eine private Flagge in der Klasse gesetzt werden.

Dies ist, was Charlie Poole sich has suggested, wenn Sie müssen

+1

Das ist ärgerlich, hätte ich erwartet eine Art NUnit.CurrentTestContext API. Ich muss nur wissen, ob der Test erfolgreich war, da es zusätzliche Informationen gibt, die ich in diesem Gerät bereitstellen kann, wenn es fehlschlägt, was beim Debuggen helfen würde. –

2

Nur wenn Sie dies manuell tun. Tatsächlich wissen Sie sogar nicht, welche Tests ausgeführt werden sollen. In NUnit IDE kann man einige Tests aktivieren und andere deaktivieren. Wenn Sie, wenn einige spezifische Tests umfassen könnten Sie hat laufen wissen wollen, Code wie folgt in Ihrer Testklasse:

enum TestStateEnum { DISABLED, FAILED, SUCCEDED }; 
TestStateEnum test1State = TestStateEnum.DISABLED; 

[Test] 
void Test1() 
{ 
test1State = TestStateEnum.FAILED; // On the beginning of your test 
... 
test1State = TestStateEnum.SUCCEDED; // On the End of your Test 
} 

Dann können Sie die test1State Variablen überprüfen. Wenn der Test eine Ausnahme auslöst, wird das SUCCEDED nicht gesetzt. Sie können dies auch endlich in einem Try-Catch setzen mit einer etwas anderen Logik in Ihren Tests blockieren:

[Test] 
void Test1() 
{ 
test1State = TestStateEnum.SUCCEDED; // On the beginning of your test 
try 
{ 
    ... // Your Test 
} 
catch(Exception) 
{ 
    test1State = TestStateEnum.FAILED; 
    throw; // Rethrows the Exception 
} 
} 
+0

Es ist nicht ein Versuch zu sagen, welcher Test ausgeführt wurde, nur ein anderer Fehler, den ich werfen möchte, so kann ich einen genaueren StackTrace erhalten –

-1

IMHO Logik abreißen sollte das Testergebnisses unabhängig sein.

Im Idealfall sollten Sie Setup und Teardown vollständig vermeiden, ein al xunit.net. Weitere Informationen finden Sie unter here.

+0

In der Regel sollten Sie das absolut tun. Jedoch halte ich meine Tests sauber und zusammenhängend mit einem BDD-Geschmack. Manchmal bedeutet das, dass man über lambdas Vorgaben und Behauptungen aufstellt und sie im TearDown ausführt. Das Problem ist, wenn aus irgendeinem Grund der Setup- oder Testkörper fehlgeschlagen ist, der Stacktrace verwirrend ist. –

25

Dies wurde bereits in Ran's answer zu ähnlichen SO Frage gelöst. Quoting Ran:

Seit Version 2.5.7 ermöglicht NUnit Teardown zu erkennen, wenn der letzte Test fehlgeschlagen ist. Eine neue TestContext-Klasse ermöglicht Tests, um auf Informationen über sich selbst einschließlich der TestStauts zuzugreifen.

Weitere Einzelheiten finden Sie in http://nunit.org/?p=releaseNotes&r=2.5.7

[TearDown] 
public void TearDown() 
{ 
    if (TestContext.CurrentContext.Result.Status == TestStatus.Failed) 
    { 
     PerformCleanUpFromTest(); 
    } 
} 
+0

Danke für den Link. Bitte beachten Sie, dass diese Frage über eineinhalb Jahre vor Davids Antwort veröffentlicht wurde. –

+3

In Nunit 3.x ist es 'if (TestContext.CurrentContext.Result.Outcome == ResultState.Failure)' – Lukas

4

Wenn Sie TearDown verwenden mögen Status des letzten Tests zum Nachweis mit NUnit 3.5 es sein sollte:

[TearDown] 
public void TearDown() 
{ 
    if (TestContext.CurrentContext.Result.Outcome.Status.Equals(TestStatus.Failed)) 
    { 
     //your code 
    } 
} 
Verwandte Themen