MbUnit回滚

时间:2009-03-27 16:02:04

标签: c# tdd mbunit

我正在测试MbUnit Framework,并希望在每次测试后让我的测试数据库保持持久状态。我怎么能做到这一点?

这就是我正在尝试的,但在测试完成后我的桌子已经填满了。


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();

                }

            }
        }

    }
}

编辑:

经过一番阅读后,我发现必须启用分布式事务处理协调器。启动此服务后,测试仍然没有成功:(

3 个答案:

答案 0 :(得分:1)

您的代码中有一个COMMIT语句。也许你应该删除它。

答案 1 :(得分:0)

为什么不让System.Transactions.TransactionScope处理它?<​​/ p>

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

或者,这似乎正是MbUnit Rollback2属性所做的事情(Rollback使用EnterpriseServices / COM +并且针对.NET 1.1)。

答案 2 :(得分:0)

我使用Proteus它做得很好。易于安装和使用.. 您只需要向Setups TearDowns添加一些代码,并使用数据库的'snapshot'准备文件夹。