Ich versuche eine Integrationstestklasse einzurichten, die jeden Test in einer Transaktion umschließt. Auf diese Weise kann ich die Transaktion nach jedem Test zurücksetzen, anstatt die Datenbank vor jedem Test zurückzusetzen.Verschachteln von Transaktionsbereichen für Integrationstests mit Rhino Commons UnitOfWork
Ich möchte auch Transaktionen in den Integrationstests selbst verwenden können.
Ich verwende NHibernate und die Rhino Commons UnitOfWork für das Projekt. Ich verwende MSTest für die Tests.
Ich möchte etwas wie folgt aus:
[TestInitialize]
public void TestInit() {
// create outer transaction scope
UnitOfWork.Start();
UnitOfWork.Current.BeginTransaction();
}
[TestCleanup]
public void TestCleanup() {
// rollback outer transaction
UnitOfWork.Current.Dispose();
}
[TestMethod]
public void IntegrationTest() {
using (UnitOfWork.Start(UnitOfWorkNestingOptions.CreateNewOrNestUnitOfWork)) {
UnitOfWork.Current.BeginTransaction();
// integration test code
UnitOfWork.Current.TransactionalFlush();
// possibly more transactions
}
}
Dies ist das erste Mal, dass ich verwendet habe NHibernate, Rhino Commons und MSTest. Ich bin nicht klar über das Verhalten von Sitzungen mit verschachtelten Rhino Commons UnitOfWork
s. Was ich hier habe, rollt die Änderungen aus dem Integrationstest nicht zurück.
Ich versuchte TransactionScope
von System.Transactions
verwenden, aber die folgende Fehlermeldung erhalten, wenn die UnitOfWork
s Ende:
System.InvalidOperationException: Trennen kann nicht aufgerufen werden, während eine Transaktion im Gange ist ..
Also hier sind meine Fragen:
Gibt es eine Möglichkeit, dieses Verhalten mit UnitOfWork in Rhino Commons zu bekommen? Wenn nicht, sollte ich die Datenbank vor jedem Test zurücksetzen oder gibt es eine andere Möglichkeit, Transaktionen zu verschachteln, die gut mit UnitOfWork funktionieren?
Vielen Dank.