J'essaie de configurer une classe de test d'intégration qui enveloppe chaque test dans une transaction. De cette façon, je peux annuler la transaction après chaque test au lieu de réinitialiser la base de données avant chaque test.Imbrication des portées de transaction pour les tests d'intégration à l'aide de Rhino Commons UnitOfWork
Je souhaite également pouvoir utiliser les transactions dans les tests d'intégration eux-mêmes. J'utilise NHibernate et le Rhino Commons UnitOfWork pour le projet. J'utilise MSTest pour les tests.
Je veux quelque chose comme ceci:
[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
}
}
C'est la première fois que je l'ai utilisé NHibernate, Rhino Commons et MSTest. Je ne suis pas clair sur le comportement des sessions avec Rhino Commons imbriqués UnitOfWork
s. Ce que j'ai ici ne supprime pas les modifications du test d'intégration.
J'ai essayé d'utiliser TransactionScope
de System.Transactions
, mais l'erreur suivante lorsque la fin de la UnitOfWork
:
System.InvalidOperationException: Disconnect ne peut pas être appelé alors qu'une transaction est en cours ..
Voici donc mes questions:
Existe-t-il un moyen d'obtenir ce comportement avec UnitOfWork dans Rhino Commons? Si ce n'est pas le cas, dois-je simplement réinitialiser la base de données avant chaque test ou existe-t-il un autre moyen d'imbriquer des transactions qui fonctionne bien avec UnitOfWork?
Merci.