Wir lassen verschiedene TestFixtures innerhalb eines Assemblies laufen. Was wir wollen ist nicht für jedes Fixture das unterliegende Framework zu initialisieren und im FixtureTearDown zu Disposen. Wir wollen das Ganze einmal pro Lauf. Jetzt könnte ich mich zwar auf das AppDomain.CurrentDomain.ProcessExit hängen um dort zu Disposen, das löst aber nicht alle Probleme.
Das Initialisieren des Frameworks muss zwingend immer vom gleichen Thread accessed werden (Das kann ich leider nicht ändern). Das geht so lange ich einen gesamten Lauf für sich betrachte. Startet aber jemand ein einzelnes Fixture, z.B. via UI und anschließend ein weiteres, dann knallt es beim 2ten weil das Fixture in einem neuen TestRunner der in einem neuen Thread läuft ausgeführt wird. Ich habe schon versucht das zu unterbinden aber keine Lösung gefunden. Was mir eigentlich fehlt ist ein Event/Attribute ala der TestLauf ist beendet. Dort kann ich dann einfach Dispose vom Framework aufrufen. Oder aber der TestRunner wird immer mit dem gleichen Thread erzeugt solange die NUnit Instanz die gleiche ist.
Bin für jede Info Dankbar.
Edit: Die Möglichkeit IAddin zu implementieren ist nicht praktikabel weil die Tests in verschiedenen Umgebungen ausgeführt werden, die das unter Umständen nicht unterstützen.
Again what learned...
google hilft
Wenn's zum weinen nicht reicht, lach drüber!
Und in wieweit soll mir das helfen? Die Attrbiute sind mir doch längst bekannt nützen aber nichts, denn ich brauche einen Call vor dem gesamten Lauf und nach dem gesamten lauf.
Again what learned...
Mehr gibts aber nicht.
Ein Unit-Test muss in sich abgeschlossen sein und sollte keine Abhängigkeit haben, ob irgend ein Framework ausserhalb des Tests initialisiert ist.
Wenn das nicht möglich ist darf eben nur ein Test gleichzeitig laufen.
Hallo,
soweit mir bekannt ist die höchste Ebene für Test-Setups, ist eine Intialisierungen auf Assembly-Ebene, also für alle Tests einer Assembly.
A SetUpFixture outside of any namespace provides SetUp and TearDown for the entire assembly.
Ms-Test unterstützt glaub auch nicht mehr - also maximal auf Assembly-Ebene...ggf. gibts ne möglichkeit ein Session-Setup zu machen, hab ich aber bisher noch nicht gesehen.
vg
Wenn's zum weinen nicht reicht, lach drüber!
@Mabo: Die Tests sind in sich abgeschlossen, aber dadurch eben langsam (In unserem Fall). Daher die versuchte Optimierung.
Es gibt via Addin die Möglichkeit, sich in den TestRunStarted und TestRunFinished zu hängen, jedoch gibt es diese Möglichkeit nicht als Attribut. Warum das so ist bleibt das Geheimnis der NUnit Entwickler.
Again what learned...
Ein Unit-Test ist dazu da, dass ein kleiner Schnipsel von Code auf seine Richtigkeit überprüft wird.
Es hört sich hier so an, als ob ihr Unit-Tests als Integrationstests missbraucht.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
In dem Fall hast du recht, wir missbrauchen das Framework für Integrationstests. Ändert aber nichts an meinem Problem 😦
Again what learned...
Das Problem lässt sich allerdings mit der eingesetzten Technik nicht bzw. nur umständlich lösen.
Mir fällt ja nicht mal eine umständliche Lösung ein, wenn du eine hast dann wäre ich dir Dankbar wenn du sie mir mitteilst.
Again what learned...
Quellcode runterladen und die benötigten Funktionen selber implementieren 😃
Ich glaub das hier sieht vielversprechend aus Setup/TearDown Attribute.
Again what learned...
Das hat doch Parso schon im zweiten Beitrag geschrieben; hat dir aber nicht gereicht. ?(
Das ist falsch, parso hat vom FixtureSetup geschrieben das ist in der Tat nicht ausreichend. Aber auf der Seite war es unten mit als Unterlink aufgeführt den ich wohl übersehen habe.
Das von mir gepostete ist ein SetUp Attribute und erfüllt genau das was ich brauche, zwar mit ein paar unschönen Randbedingungen aber taugt trotzdem!
Edit: Ich nehme alles zurück. Die Doku von den Attributen ist irreführend bzw. verwirren sie zumindest mich. DAs SetUp Attribute ist das falsche weil das für jeden Test im Fixture gerufen wird. Das SetupFixture Attribut kann dazu benutzt werden.
This is the attribute that marks a class that contains the one-time setup or teardown methods for all the test fixtures under a given namespace. The class may contain at most one method marked with the SetUpAttribute and one method marked with the TearDownAttribute.
There are a few restrictions on a class that is used as a setup fixture.
* It must be a publicly exported type or NUnit will not see it.
* It must have a default constructor or NUnit will not be able to construct it.
Sorry für die Missverständnisse ich versuch das jetzt mal so.
Again what learned...