2009-07-29 13 views
3

Gibt es eine Möglichkeit, eine bedingte TearDown in NUnit zu machen?NUnit Conditional Teardown?

Ich habe einen TestFixture die einen Bedarf muss Bereinigungscode für nur ein paar Tests durchführen, und ich will nicht wirklich zu:

  1. bei jedem Test die TearDown Methode Run
  2. ein eigenes erstellen Hilfsmethode und rufen Sie es von den Tests erfordern Reinigung, wenn ich es vermeiden kann

Antwort

2

gibt es leider nicht.

Können Sie die Bereinigung nicht stattdessen in [TestFixtureTearDown] durchführen, nachdem alle Tests abgeschlossen sind? Ich schätze, das hängt davon ab, ob die Bereinigung vor dem nächsten Test durchgeführt werden muss.

Alternativ können Sie die Tests, die eine Bereinigung in einer anderen Klasse/TextFixture erfordern, zusammen mit anderen Tests verwenden. Dann können Sie einen TearDown verwenden, der nicht bedingt sein muss.

Edit: Eines habe ich nur gedacht habe, was getan werden könnte, das Ziel zu erreichen, wenn auch wahrscheinlich nicht wirklich lohnt sich für diese besondere Notwendigkeit ist, ist, dass Sie NUnit erweitern können - erstellen Sie Ihre eigenen benutzerdefinierten Attribute, mit denen Sie umgehen konnten, wie Sie es wollten. Dies wird here erwähnt. Wie ich schon sagte, ich glaube nicht wirklich, sollten Sie dafür, dass Weg zu gehen, aber es ist gut zu wissen, none-the-less

+0

Guter Vorschlag, aber ich die Bereinigung müssen nachlaufen spezifische Tests für den nächsten Test bereit zu sein. Hatte nicht an eine andere Testvorrichtung gedacht. Danke für die Empfehlung. –

+1

Keine Sorge, es gab eine sehr ähnliche Frage neulich: http://stackoverflow.com/questions/1194198/how-can-i-skip-the-setup-method-only-for-a-particuler-test -in-nunit/1194213 # 1194213 Auch habe ich gerade an eine Alternative gedacht .. bitte siehe Bearbeiten in meiner Antwort. Ich denke nicht, dass es die beste Lösung/oder besonders etwas ist, wofür du Zeit verbringen möchtest, aber es wird es trotzdem beinhalten. – AdaTheDev

+0

@Mark - Gute Praxis ist es, niemals Tests zu haben, die aufeinander angewiesen sind. – AutomatedTester

0

Sie können die Haupt TearDown in einer Basisklasse haben:

[TearDown] 
public virtual void TearDown() 
{ 
    // Tear down things here 
} 

und es dann in der Klasse überschreiben, in dem Sie die Tests, die nicht die Träne nach unten Code ausführen sollte:

[TearDown] 
public override void TearDown() 
{ 
    // By not calling base.TearDown() here you avoid tearing down 
}