2009-03-27 5 views
0

Я тестирую платформу MbUnit и хочу сохранить тестовую базу данных в постоянном состоянии после каждого теста. Как я могу это сделать?MbUnit Rollback

Это то, что я пытаюсь, но мой стол заполняется после завершения теста.


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:

После некоторого чтения я пришел к пониманию того, что координатор распределенных транзакций должен быть включен. После того, как начиная эту услугу и тестирование еще не успех :(

+0

Помогает ли обновление MBUnit до версии 3.0.6? Из [Анонсирование Gallio и MbUnit v3.0.6] [1] > Изменено [Откат], чтобы ввести контекст транзакции COM +, такой как атрибут оригинального откат MbUnit v2. Это должно устранить проблемы совместимости, которые другие отметили. [1]: http://blog.bits-in-motion.com/2009/03/announcing-gallio-and-mbunit-v306.html – Bender

ответ

0

Почему бы просто не позволить System.Transactions.TransactionScope справиться с этим?

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

С другой стороны, это, кажется, именно то, что атрибут MbUnit Rollback2 делает все равно (Откат использует EnterpriseServices/COM + и направлен на .NET 1.1).

+0

Мне известно об объеме транзакции, но я хочу знать как это сделать с базой MbUnit. Это возможно? –

+0

Да. Атрибут Rollback не является предпочтительным - атрибут Rollback2, который, я считаю, является предпочтительным решением для .NET 2.0 и выше. –

0

Я использую Proteus это просто отлично. Простота в установке и использовании .. Все, что вам нужно, это добавить код для расстановок разборок и подготовить папку с «снимок 'вашей базы данных.

1

У вас в коде есть инструкция COMMIT. Возможно, вы должны удалить это.