Откат MbUnit - PullRequest
       23

Откат MbUnit

0 голосов
/ 27 марта 2009

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

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


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:

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

Ответы [ 3 ]

1 голос
/ 16 апреля 2009

В вашем коде есть оператор COMMIT. Возможно, вам следует удалить это.

0 голосов
/ 27 марта 2009

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

0 голосов
/ 27 марта 2009

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

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

В качестве альтернативы, похоже, именно это и делает атрибут MbUnit Rollback2 (Rollback использует EnterpriseServices / COM + и нацелен на .NET 1.1).

...