在DB事务中自动包装单元测试?

时间:2009-01-02 18:51:48

标签: .net nunit aop

[编辑(哈伦):Duplicate]

我正在寻找一种方法来自动将我的NUnit集成测试包装在数据库事务中,以便在测试结束时自动回滚测试所做的更改。理想情况下,我会使用自定义属性修饰某些测试方法,该属性会导致NUnit在测试开始时创建事务,并在测试结束时将其回滚...我可以编写属性,但我不知道在哪里添加检查它。

测试数据库的大小为3GB,因此无法在每次测试开始时进行恢复。我知道我可以在每个测试的主体中手动创建一个事务,但我正在寻找更优雅的东西。

也许有一个IL-rewriting工具(可能是AOP框架)可以为我做这个?有人有什么建议吗?

3 个答案:

答案 0 :(得分:4)

这不是你会遇到嵌套交易的麻烦吗?据我所知,大多数DB不支持事务中的事务。因此,如果测试中的代码完全使用事务(我想如果你使用支持事务的数据库,你会使用它们),那么你真正想要的是嵌套事务,(我被告知)最多数据库不直接支持。

答案 1 :(得分:3)

有两条建议。第一种是使用SetUp和TearDown属性来启动事务并在完成后将其回滚。在NUnit中这样做的文档在这里:

http://www.nunit.org/index.php?p=setup&r=2.4.8

如果您不想使用它,我看到的另一个选项是在每个方法中对其进行编码,但在using语句中使用TransactionScope实例来创建事务(提供者应该自动登记)。

当然,您也可以在SetUp和TearDown方法中创建TransactionScope实例。

答案 2 :(得分:0)

Spring.net?

我来自Java / JUnit背景,但我知道在Java中你可以使用Springframework来做到这一点。

(您还必须从ApplicationContext / BeanFactory获取测试才能将AOP应用于它)。