为什么[SetUpFixture]中的[OneTimeSetUp]被调用(Test,TestCaseSource())

时间:2017-10-13 10:38:36

标签: c# nunit-3.0

我在Nunit 3测试用例中遇到了奇怪的情况,[SetUpFixture]中的My [OneTimeSetUp]在[Test, TestCaseSource(typeof(TestDataProvider), "GetSQLTestCases")]之后被调用。

当我从测试中删除TestCaseSource属性时,按照下面的顺序按预期工作。

OneTimeSetup - >测试

请告诉我如何解决上述问题。

-Neeraj

1 个答案:

答案 0 :(得分:0)

这是预期的。在调用任何测试(或任何SetUp / OneTimeSetUp方法)之前,将评估所有TestCaseSource目标。

顺序为:

(all TestCaseSource in assembly) ->
  (SetupFixture ctor) ->
    (OneTimeSetUp) ->
      (TestFixture ctor) ->
        (SetUp) ->
          (Test)

这是因为TestCaseSource的结果是用于执行测试的数据列表;因为这是将要运行的测试的列表,所以它是在开始时生成的。 (较早的NUnit会创建类的实例,以访问非静态的TestCaseSource目标。)

尽管通常不建议这样做,但是TestCaseSource的后备静态方法可以“加载数据库内容”,只要它不依赖于首先调用OneTimeSetUp即可。通常,TestCaseSources应该是FAST且不占用资源,因为测试中没有考虑“虚拟时间”。