鉴于以下内容:
public class TestEnvironment
{
private static TransactionScope scope;
[AssemblyInitialize]
public static void Init(TestContext context)
{
/* establish database connection, create Session fake, create Items fake, etc. */
scope = new TransactionScope();
}
[AssemblyCleanup]
public static void Cleanup()
{
scope.Dispose();
}
}
我看到测试数据显示在数据库中。我在测试输出中看到以下错误:
必须将TransactionScope置于创建的同一线程中 它
仅在运行所有测试时才会发生这种情况。当任何给定的测试单独运行时,没有问题。
如果我删除scope.Dispose()
调用,允许范围“自然”处理,则错误消失,但我仍然看到记录在数据库中累积。
答案 0 :(得分:2)
如果TransactionScope
如何使用线程(因为我对这个问题一无所知)没有说太多话,那么通过在每个TestClass
实例化期间创建范围来解决问题。
为了保存一些按键,我们创建了一个ScopedTestClass
类:
public class ScopedTestClass : IDisposable
{
private TransactionScope TxnScope;
public ScopedTestClass()
{
TxnScope = new TransactionScope();
}
public void Dispose()
{
TsnScope.Dispose();
}
}
每个TestClass
都继承自:
[TestClass]
public class MyTestClass : ScopedTestClass
{
[TestMethod]
public void DoSomething()
{
// sanity at last!
}
}
一切都很好。