Laden...

NUnit (2.5.10)-> Event/Attribute Tests finished

Erstellt von rollerfreak2 vor 8 Jahren Letzter Beitrag vor 8 Jahren 3.543 Views
rollerfreak2 Themenstarter:in
916 Beiträge seit 2008
vor 8 Jahren
NUnit (2.5.10)-> Event/Attribute Tests finished

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...

P
157 Beiträge seit 2014
vor 8 Jahren

Wenn's zum weinen nicht reicht, lach drüber!

rollerfreak2 Themenstarter:in
916 Beiträge seit 2008
vor 8 Jahren

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...

M
334 Beiträge seit 2007
vor 8 Jahren

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.

P
157 Beiträge seit 2014
vor 8 Jahren

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!

rollerfreak2 Themenstarter:in
916 Beiträge seit 2008
vor 8 Jahren

@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...

16.806 Beiträge seit 2008
vor 8 Jahren

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.

rollerfreak2 Themenstarter:in
916 Beiträge seit 2008
vor 8 Jahren

In dem Fall hast du recht, wir missbrauchen das Framework für Integrationstests. Ändert aber nichts an meinem Problem 😦

Again what learned...

M
334 Beiträge seit 2007
vor 8 Jahren

Das Problem lässt sich allerdings mit der eingesetzten Technik nicht bzw. nur umständlich lösen.

rollerfreak2 Themenstarter:in
916 Beiträge seit 2008
vor 8 Jahren

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...

M
334 Beiträge seit 2007
vor 8 Jahren

Quellcode runterladen und die benötigten Funktionen selber implementieren 😃

rollerfreak2 Themenstarter:in
916 Beiträge seit 2008
vor 8 Jahren

Ich glaub das hier sieht vielversprechend aus Setup/TearDown Attribute.

Again what learned...

M
334 Beiträge seit 2007
vor 8 Jahren

Das hat doch Parso schon im zweiten Beitrag geschrieben; hat dir aber nicht gereicht. ?(

rollerfreak2 Themenstarter:in
916 Beiträge seit 2008
vor 8 Jahren

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...