我在Nunit 3测试用例中遇到了奇怪的情况,[SetUpFixture]中的My [OneTimeSetUp]在[Test, TestCaseSource(typeof(TestDataProvider), "GetSQLTestCases")]
之后被调用。
当我从测试中删除TestCaseSource
属性时,按照下面的顺序按预期工作。
OneTimeSetup - >测试
请告诉我如何解决上述问题。
-Neeraj
答案 0 :(得分:0)
这是预期的。在调用任何测试(或任何SetUp / OneTimeSetUp方法)之前,将评估所有TestCaseSource目标。
顺序为:
(all TestCaseSource in assembly) ->
(SetupFixture ctor) ->
(OneTimeSetUp) ->
(TestFixture ctor) ->
(SetUp) ->
(Test)
这是因为TestCaseSource的结果是用于执行测试的数据列表;因为这是将要运行的测试的列表,所以它是在开始时生成的。 (较早的NUnit会创建类的实例,以访问非静态的TestCaseSource目标。)
尽管通常不建议这样做,但是TestCaseSource的后备静态方法可以“加载数据库内容”,只要它不依赖于首先调用OneTimeSetUp即可。通常,TestCaseSources应该是FAST且不占用资源,因为测试中没有考虑“虚拟时间”。