我正在测试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();
}
}
}
}
}
编辑:
经过一番阅读后,我发现必须启用分布式事务处理协调器。启动此服务后,测试仍然没有成功:(
答案 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'准备文件夹。