【问题标题】:Does NUnit create a new instance of the test fixture class for each contained test method nowadays?现在 NUnit 是否为每个包含的测试方法创建一个新的测试夹具类实例?
【发布时间】:2011-08-01 22:50:57
【问题描述】:

正如在一本相当古老的书XUnit Patterns 中所写的那样,NUnit 2.0 并没有为每个测试创建新的测试夹具,因此,如果测试正在操纵夹具的某些状态,它就会被共享,并可能导致各种不良副作用。

还是一样吗?我试图在官网找到它但失败了,并且有一段时间没有使用NUnit。

【问题讨论】:

    标签: unit-testing nunit


    【解决方案1】:

    该夹具为该夹具中的所有测试创建一次。

    对于给定的夹具类,FixtureSetup 方法为夹具中的所有测试运行一次,而 Setup 方法为每个测试运行一次。因此,任何需要重置的状态都应该在 Setup 方法(或 TearDown,在每次测试结束时运行)中完成。

    【讨论】:

    • 请注意,较新版本的 NUnit 将“FixtureSetup”替换为“OneTimeSetUp”
    【解决方案2】:

    我发现这是一个影响我的问题,并且还找到了这个链接,它提供了一些关于该问题的历史; https://blogs.msdn.microsoft.com/jamesnewkirk/2004/12/04/why-variables-in-nunit-testfixture-classes-should-be-static

    我认为我们编写 NUnit V2.0 时最大的错误之一就是没有为每个包含的测试方法创建测试夹具类的新实例。

    尚未在 V3 中对此进行测试以查看其是否更改

    【讨论】:

    • 它与 NUnit v3.9 相同(一个单一的夹具实例重复用于所有测试)。
    【解决方案3】:

    从 3.13 开始,您可以配置它

    LifeCycle.SingleInstance    A single instance is created and shared for all test cases
    LifeCycle.InstancePerTestCase   A new instance is created for each test case
    

    https://docs.nunit.org/articles/nunit/writing-tests/attributes/fixturelifecycle.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-23
      • 2021-09-13
      • 2019-06-01
      • 2017-09-07
      • 2016-09-12
      • 2021-10-28
      • 1970-01-01
      • 2012-03-02
      相关资源
      最近更新 更多