2009-03-27 10 views
0

Je suis en train de tester le framework MbUnit et je souhaite que ma base de test reste dans un état persistant après chaque test. Comment puis-je accomplir cela?MbUnit Rollback

C'est ce que j'essaie, mais mon tableau est rempli une fois le test terminé.


using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Data; 
using Gallio.Framework; 
using MbUnit.Framework; 

using NHibernate; 
using NHibernate.Cfg; 

namespace BusinessLayer.Tests 
{ 
    [TestFixture] 
    public class PersonNHibernateTests 
    { 
     [Test] 
     [Rollback] 
     public void CanSavePerson() 
     { 
      Configuration config = new Configuration(); 
      config.Configure(); 
      ISessionFactory factory = config.BuildSessionFactory(); 

      using (ISession session = factory.OpenSession()) 
      { 
       using (ITransaction tx = session.BeginTransaction()) 
       { 

        const string CONST_STR_FIRSTNAME = "Stephen"; 
        const string CONST_STR_LASTNAME = "Manga"; 
        DateTime birthdate = new DateTime(1974, 6, 20); 

        Person p = new Person 
        { 
         FirstName = CONST_STR_FIRSTNAME, 
         LastName = CONST_STR_LASTNAME, 
         Birthdate = birthdate 
        }; 

        session.SaveOrUpdate(p); 
        session.Flush(); 

        tx.Commit(); 

       } 

      } 
     } 

    } 
} 

Edit:

Après une lecture que je suis venu à comprendre que Distributed Transaction Coordinator doit être activé. Après le démarrage de ce service et les essais encore sans succès :(

+0

La mise à jour de MBUnit vers la version 3.0.6 est-elle utile? De [Annoncer Gallio et MbUnit v3.0.6] [1] > Modifier [Rollback] pour entrer un contexte de transaction COM + comme l'attribut de restauration d'origine de MbUnit v2. Cela devrait corriger les problèmes de compatibilité que d'autres ont noté. Je suis au courant de la portée de la transaction, mais je veux savoir: [1]: http://blog.bits-in-motion.com/2009/03/announcing-gallio-and-mbunit-v306.html – Bender

Répondre

0

Pourquoi ne pas simplement laisser System.Transactions.TransactionScope le manipuler?

using (new TransactionScope()) 
{ 
    // do stuff that gets automatically rolled back 
} 

Sinon, cela semble être exactement ce que l'attribut MbUnit Rollback2 fait de toute façon (Rollback utilise EnterpriseServices/COM + et vise à .NET 1.1).

+0

comment faire avec le framework MbUnit. Est-ce possible? –

+0

Oui. L'attribut Rollback n'est pas l'approche préférée - l'attribut Rollback2 je crois est la solution préférée pour .NET 2.0 et ci-dessus. –

0

J'utilise Proteus ne très bien. Facile à installer et à utiliser .. Tout ce que vous avez besoin est d'ajouter un code à SetUps démontages et préparer un dossier avec « instantané 'de votre base de données.

1

Vous avez une instruction COMMIT dans votre code. Peut-être devriez-vous supprimer cela.