首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Server 2005上的NUnit回滚属性似乎失败

问Server 2005上的NUnit回滚属性似乎失败
EN

Stack Overflow用户
提问于 2015-04-13 16:29:22
回答 1查看 144关注 0票数 0

我在我的[Rollback]数据库级测试中使用了一个很好的小NUnit属性:

代码语言:javascript
复制
public class RollbackAttribute : Attribute, ITestAction 
{
   private TransactionScope _transaction;

   public ActionTargets Targets {
      get { return ActionTargets.Test; }
   }

   public void BeforeTest(TestDetails testDetails) {
      _transaction = new TransactionScope();
   }

   public void AfterTest(TestDetails testDetails) {
      _transaction.Dispose();
   }
}

这样,我就可以像这样装饰我基于数据库的测试:

代码语言:javascript
复制
[Test]
[Rollback]
public void TestGetAllActiveItems()
{
    // Arrange
    SetupTestData();

    // Act
    var results = GetAllActiveItems(string.Empty, string.Empty);

    // Assert
    Assert.IsNotNull(results);
}

我在SetupTestData()方法中创建和存储的示例数据用于测试,然后在测试结束时丢弃。

在我的本地开发机器上,这就像SQL Server 2012和2014的魅力一样--但由于某种原因,它似乎在我们的构建和测试机器上失败了,因为它仍然在使用SQL Server 2005 (即将升级)。

知道为什么吗?我只看到我插入到我的SetupTestData()方法中的数据库中的两个项目是为每个测试方法插入一次,而NOT在每个方法的末尾回滚,因为一些奇怪的原因……我在build / testrun日志中没有看到任何错误或其他指示符--它只是不工作,并且在我的构建/测试服务器上不执行回滚操作。

有什么指示吗?有什么想法?要查点吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-13 20:42:12

基于这篇文章 (描述了SQL2005的具体细节),我假设您的问题可能是您正在对所有事务重用相同的连接,引用如下:

在Server 2005中,使用TransactionScope启动本地事务,而不是分布式事务。这就是TransactionScope是否与客户端代码或SQLCLR过程一起使用的行为,除非在调用SQLCLR过程时已经启动了事务。 ..。 事务实际上是在SqlConnection上调用Open时开始的,而不是在创建TransactionScope实例时开始的。 ..。 此时,由于Server 2005不支持同一连接上的自主事务,因此SqlConnection的BeginTransaction方法是本地事务的最佳选择。

请让我知道这条信息是否有效,因为我目前无法测试问题自己。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29610399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档