【发布时间】:2015-04-13 16:29:22
【问题描述】:
我在我的 NUnit 数据库级测试中使用了一个不错的小 [Rollback] 属性:
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();
}
}
所以我可以像这样装饰我的基于数据库的测试:
[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 在每个方法的末尾回滚,原因很奇怪。 ...我在构建/测试运行日志中没有看到任何错误或其他指标 - 它只是不起作用并且不会在我的构建/测试服务器上进行回滚。
有什么建议吗?想法?检查点?
【问题讨论】:
-
你能解决这个问题吗?
-
@MichalHosala:不,仍在努力。它似乎与(a)在测试开始之前打开的 SQL 连接,以及(b)EF 的多个 ObjectContexts 导致“MSDTC”在服务器上启动(并失败) - 很奇怪...... .. 但我也确认这是一个普遍问题 - SQL Server 2014(在构建服务器上)也有同样的问题 - 它不是特定于版本的
标签: sql-server-2005 nunit rollback