2009-03-27 5 views
0

Ich teste das MbUnit Framework und möchte meine Testdatenbank nach jedem Test in einem persistenten Zustand halten. Wie kann ich das erreichen?MbUnit Rollback

Dies ist, was ich versuche, aber meine Tabelle ist gefüllt, nachdem der Test abgeschlossen ist.


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:

Nach einiger Lektüre ich zum Verständnis gekommen sind, die Distributed Transaction Coordinator aktiviert werden muss. Nach dem Start dieses Service und Prüfung immer noch keinen Erfolg :(

+0

Hilft das Aktualisieren von MBUnit auf Version 3.0.6? Von [Ankündigung Gallio und MbUnit v3.0.6] [1] > Geändert [Rollback], um einen COM + Transaktionskontext wie MbUnit v2 ursprünglichen Rollback-Attribut einzugeben. Dies sollte Kompatibilitätsprobleme beheben, die andere bemerkt haben. [1]: http://blog.bits-in-motion.com/2009/03/announcing-gallio-and-mbunit-v306.html – Bender

Antwort

0

Warum gerade sie System.Transactions.TransactionScope Griff nicht lassen?

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

Alternativ scheint dies genau das zu sein, was die MbUnit Rollback2 Attribut tut sowieso (Rollback + verwendet Enterprise/COM und ist auf .NET 1.1).

+0

Ich bin mir der Transaktionsumfang bewusst, aber ich möchte wissen wie man das mit dem MbUnit-Framework macht. Ist das möglich? –

+0

Ja. Das Rollback-Attribut ist nicht der bevorzugte Ansatz - das Rollback2-Attribut ist meiner Meinung nach die bevorzugte Lösung für .NET 2.0 und höher. –

0

ich Proteus es in Ordnung. einfach zu installieren und zu verwenden .. Alles, was Sie brauchen, ist etwas Code hinzufügen, nicht nur verwenden, richtet Zerlegungen Setups und bereiten Ordner mit ‚Schnappschuss 'Ihrer Datenbank.

1

Sie haben eine COMMIT-Anweisung in Ihrem Code. Vielleicht solltest du das entfernen.