这安全吗NUnit基类打开并回滚TransactionScope
我想最好为NUnit测试装置创建一个基类,在设置阶段打开TransactionScope,然后在拆卸阶段回滚事务。 大概是这样的:这安全吗NUnit基类打开并回滚TransactionScope,nunit,transactionscope,Nunit,Transactionscope,我想最好为NUnit测试装置创建一个基类,在设置阶段打开TransactionScope,然后在拆卸阶段回滚事务。 大概是这样的: public abstract class TestFixtureBase { private TransactionScope _transaction; [TestFixtureSetUp] public void TestFixtureSetup() { _transaction = new Trans
public abstract class TestFixtureBase
{
private TransactionScope _transaction;
[TestFixtureSetUp]
public void TestFixtureSetup()
{
_transaction = new TransactionScope();
}
[TestFixtureTearDown]
public void TestFixtureTearDown()
{
if (_transaction != null)
{
_transaction.Dispose();
}
}
}
你认为这是个好主意吗
显然,该数据库只是一个测试数据库,而不是一个活动数据库,但是如果它充满了单元测试中的垃圾数据,那么它仍然会很烦人
当运行涉及大量数据访问的单元测试时,其他人会怎么做?在这里您需要小心。如果打开多个数据库连接,TransactionScope将把事务升级为分布式事务。我发现,在开始运行测试之前,编写一些简单的SQL来清除测试类感兴趣的表更容易 编辑:通常,我会将任何涉及数据库的测试称为集成测试,因为它涉及另一个系统。通常,在对代码进行单元测试时,我会模拟数据库
[TestSetup]
public void Setup()
{
foreach (string table in new string[] { "table1", "table2" })
{
ClearTable( table );
}
}
private void ClearTable( string table )
{
...standard stuff to set up connection...
SqlCommand command = connection.CreateCommand() );
command.CommandText = "delete from " + table;
command.ExecuteNonQuery();
... stuff to clean up connection...
}
我用过
它在单元测试结束时自动回滚。您可以简单地向测试添加[Rollback]属性。它是NUnit或MbUnit的扩展,用于模拟数据访问。。。除非您实际正在测试DAL实现。