Frage

[Edit (Haren): Doppelte ]

Ich bin für einen Weg, um automatisch meine NUnit Integrationstests in einer DB-Transaktion wickeln, so dass durch den Test vorgenommene Änderungen automatisch gerollt zurück, wenn der Test beendet. Im Idealfall würde ich mit einem benutzerdefinierten Attribute bestimmte Testverfahren dekoriert, die NUnit würde eine Transaktion, wenn der Test beginnt und es rollen schaffen zurück, wenn der Test endet ... ich das Attribut schreiben kann, aber ich weiß nicht, wo man hinzufügen ein für sie überprüfen.

Der Test DB ist 3GB in Größe, es zu Beginn jeden Tests so die Wiederherstellung ist keine Option. Ich weiß, ich kann eine Transaktion manuell im Körper eines jeden Tests erstellen, aber ich bin auf der Suche nach etwas eleganter.

Vielleicht gibt es ein IL-Rewriting-Werkzeug (ein AOP Framework, vielleicht), dass das für mich tun? Jemand irgendwelche Vorschläge?

War es hilfreich?

Lösung

Es gibt zwei Empfehlungen. Die erste ist, um die Installation zu verwenden und TearDown führt die Transaktion zu starten und rollen Sie es, wenn Sie fertig zurück. Die Dokumentation zu tun, damit in NUnit ist hier:

http://www.nunit.org/index.php ? p = Setup & r = 2.4.8

Wenn Sie wollen, dass nicht verwenden, die andere Option, die ich sehe, ist es in jedem Verfahren zu codieren, aber eine Transaction Instanz in einer using-Anweisung verwenden, um die Transaktion zu erstellen (der Anbieter sollte automatisch gewinnen).

Natürlich können Sie die Transaction Instanz in den Auf- und Abbau-Methoden als auch erstellen.

Andere Tipps

Gehst du nicht in Schwierigkeiten mit verschachtelten Transaktionen hier laufen? Als ich es am DB verstehe nicht unterstützen Transaktionen innerhalb von Transaktionen. Also, wenn der im Test befindlichen Code Transaktionen überhaupt verwendet (ich würde denken, wenn Sie einen DB verwenden, die Transaktionen unterstützt, würden Sie sie verwenden), dann, was Sie wirklich verschachtelte Transaktionen ist wollen, die (mir gesagt) die meisten DBs nicht direkt unterstützen.

Spring.net?

Ich komme aus einem Java / JUnit Hintergrund, aber ich weiß, dass in Java Sie dies mit spring tun könnten.

(Sie werden auch Ihren Test aus der Application / BeanFactory um erhalten müssen AOP, um es anzuwenden).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top