有没有办法围绕整个测试包进行事务管理(对于所有测试)?

时间:2014-10-16 08:49:26

标签: c# nunit transactionscope

基本上不是设置数据,而是在NUnit测试类中清理。我希望完成所有数据插入,运行安装程序存储过程等,然后在所有测试运行后回滚(清理)。目前我在每个测试中都使用了一个transactioncope:

[Test]
public void TestName()
{
using (var transaction = new TransactionScope())
  {
    //run month end sproc
    //run select sprocs
    //do asserts       
  }
}

2 个答案:

答案 0 :(得分:0)

这是可能的,但我不推荐它,因为测试应该彼此独立,例如,在每次测试运行之前和之后数据状态应该是相同的。否则,通过一次测试更改的数据可能会影响后续测试,并且您无法预测测试运行的顺序

您还需要考虑:

  1. 交易超时。如果您的测试需要很长时间(可能无法预测),那么"全球"交易很容易超时。

  2. 交易锁定。事务开始时的数据更改将创建锁定,这可能会影响后面的选择并使测试无效。

  3. 你应该模拟" live"的交易状态。操作,我假设不包括封闭的"全球"已经进行了大量数据更改的事务。

  4. 替代方案:

    在测试运行初始化中使用事务来设置数据,然后在测试运行清理中使用另一个事务来还原数据更改。这两项交易都不应该涵盖实际的测试。

    或者:在测试运行初始化中备份数据库,并进行数据更改。在测试运行清理中恢复数据库备份。

    或者:模拟数据库(可能需要做很多工作!)。

答案 1 :(得分:0)

您可以从AbstractDependencyInjectionSpringContextTests(Spring.NET)继承您的测试人员类

结帐" 16.3.2。测试夹具的依赖注入"来自" http://www.springframework.net/doc-latest/reference/html/testing.html"

此外,在TestFixtureSetUp中,您可以创建数据库的模式,在TestFixtureTearDown上,您可以删除模式。