代码之家  ›  专栏  ›  技术社区  ›  Seth Petry-Johnson

在数据库事务中自动包装单元测试?

  •  2
  • Seth Petry-Johnson  · 技术社区  · 16 年前

    编辑(哈伦): Duplicate ]

    我正在寻找一种在DB事务中自动包装我的nunit集成测试的方法,以便测试所做的更改在测试结束时自动回滚。理想情况下,我会用一个自定义属性来修饰某些测试方法,这将导致nunit在测试开始时创建一个事务,并在测试结束时回滚它…我可以写属性,但我不知道在哪里为它添加支票。

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

    也许有一个IL重写工具(也许是AOP框架)可以为我做到这一点?有人有什么建议吗?

    3 回复  |  直到 16 年前
        1
  •  3
  •   casperOne    16 年前

    有两个建议。第一种方法是使用SETUP和DEARDOWN属性启动事务,并在完成后将其回滚。在努尼特这样做的文件如下:

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

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

    当然,您也可以在设置和拆卸方法中创建TransactionScope实例。

        2
  •  4
  •   Michael Kohne    16 年前

    你不打算在这里遇到嵌套事务的麻烦吗?据我所知,大多数数据库不支持事务中的事务。因此,如果测试中的代码使用事务(我认为如果您使用的是支持事务的DB,那么您将使用它们),那么您真正想要的是嵌套事务,这是(我被告知)大多数DBS不直接支持的。

        3
  •  0
  •   leeand00    16 年前

    Spring.net?

    我来自Java/JUnit后台,但我知道在Java中可以使用Spring框架来实现这一点。

    (您还必须从applicationContext/beanFactory获取测试,以便将AOP应用到它)。