NUnit - 在 SetUpFixture 之前执行的 TestFixtureSource

NUnit - TestFixtureSource executed before SetUpFixture

我有一个 setupfixture 会更新一些变量。

[SetUpFixture]
    public class TestSetUp
    {
        [OneTimeSetUp]
        public void Setup()
        {
            var GlobalVar.MSIPath = Path.GetDirectoryName(Directory.GetCurrentDirectory());
        }
    }

我有一个方法作为 TestFxtureSource 的一部分,它使用由 SetUpFixture 更新的变量。

[TestFixture, TestFixtureSource(typeof(GlobalVar), nameof(GlobalVar.ExtractMSIFiles))]
    public class Tests
    {

    }


public static string[] ExtractMSIFiles()
{
   GlobalVar.MSIFiles = Directory.GetFiles(GlobalVar.MSIPath, "*.msi", SearchOption.TopDirectoryOnly); //-----> Error here
}

所有 类 都在同一个命名空间下。

但我看到错误:

OneTimeSetUp: System.Reflection.TargetInvocationException : Exception has been thrown by the target of an invocation.
  ----> System.ArgumentException : The path is empty. (Parameter 'path')

当我调试它时,我看到 TestFixtureSource 在 SetUPFixture 之前执行,因此变量 MSIPath 没有更新。 但是我的要求是需要先执行SetUPFixture,再执行TestFixtureSource。我在这里错过了什么?

这是事件的顺序...

测试发现...

  1. 你的测试用例源代码被执行,它按顺序调用静态方法ExtractMSIFiles并设置GlobalVar.MSIFiles

  2. ExtractMSIFiles引用`GlobalVar.MSIPath,尚未设置。

测试执行...

  1. 您的 SetUpFixture 首先运行。 OneTimeSetupMethod 初始化 GlobalVar.MSIPath...但为时已晚!

我认为最简单的修复方法是将 MSIPath 的初始化移动到 ExtractMSIFiles