我正在尝试设置一个集成测试类,将每个测试包装在一个事务中。这样我可以在每次测试后回滚事务,而不是在每次测试前重置数据库。
我还希望能够在集成测试本身中使用事务。
我正在为该项目使用 NHibernate 和 Rhino Commons UnitOfWork。我正在使用 MSTest 进行测试。
我想要这样的东西:
[TestInitialize]
public void TestInit() {
// create outer transaction scope
UnitOfWork.Start();
UnitOfWork.Current.BeginTransaction();
}
[TestCleanup]
public void TestCleanup() {
// rollback outer transaction
UnitOfWork.Current.Dispose();
}
[TestMethod]
public void IntegrationTest() {
using (UnitOfWork.Start(UnitOfWorkNestingOptions.CreateNewOrNestUnitOfWork)) {
UnitOfWork.Current.BeginTransaction();
// integration test code
UnitOfWork.Current.TransactionalFlush();
// possibly more transactions
}
}
这是我第一次使用 NHibernate、Rhino Commons 和 MSTest。我不清楚嵌套 Rhino CommonsUnitOfWork
的会话行为。我在这里所拥有的不会回滚集成测试中的更改。
我尝试使用TransactionScope
from ,但在s 结束System.Transactions
时出现以下错误:UnitOfWork
System.InvalidOperationException:事务正在进行时无法调用断开连接。
所以这是我的问题:
有没有办法在 Rhino Commons 中使用 UnitOfWork 获得这种行为?如果不是,我应该在每次测试之前重置数据库,还是有另一种方法可以嵌套与 UnitOfWork 配合得很好的事务?
谢谢你。