我的单元测试有一个基类,可以围绕每个测试设置一个简单的事务。
public class TestBase
{
TransactionScope _trans;
[TestInitialize()]
public void Init()
{
_trans = new TransactionScope();
}
[TestCleanup()]
public void Cleanup()
{
_trans.Dispose();
}
}
在我的一个继承类中,我有一堆我想要做的工作,在运行任何这些测试之前 - 这应该在完成所有类的测试后回滚。
[TestClass]
public class MyTests : TestBase
{
static TransactionScope _transClass;
[ClassInitialize()]
public static void ClassInit(TestContext context)
{
_transClass = new TransactionScope();
//do some setup
}
[ClassCleanup()]
public static void ClassCleanup()
{
_transClass.Dispose();
}
[TestMethod()]
public void TestMethod()
{
//do some testing
}
}
我的实际课程当然有多种测试方法。第一个测试方法传递正常,但第二个测试方法尝试在TestInitialize中设置新的TransactioScope时抛出TransactionAbortedException。有人可以解释我在这里设置的错误吗?
答案 0 :(得分:0)
我怀疑基类TestBase
可能在每次测试后对连接做了些什么。
最好使用using
语句进行交易 - 它可以消除像你这样的问题。
在单个事务中进行多次测试也不是一个好主意,这意味着测试是相互依赖的。这导致在测试通过或失败时难以跟踪问题,这取决于它是在组中运行还是单独运行。
总之,我建议不要为事务创建成员字段,而是使用带有using
语句的局部变量。