0

我正在测试 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();

                }

            }
        }

    }
}

编辑:

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

4

3 回答 3

1

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

于 2009-04-16T17:37:58.803 回答
0

为什么不让 System.Transactions.TransactionScope 处理它呢?

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

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

于 2009-03-27T16:03:38.560 回答
0

我用Proteus就很好。易于设置和使用。您只需在 Setups TearDowns 中添加一些代码,并使用数据库的“快照”准备文件夹。

于 2009-03-27T16:12:15.590 回答