在 TextFixtureSetup 中初始化的变量未被使用 IEnumerable 的测试读取

本文关键字:IEnumerable 读取 测试 TextFixtureSetup 初始化 变量 | 更新日期: 2023-09-27 18:37:10

我正在用 NUnit 编写我的第一个测试夹具,并且我正在使用外部文件来加载匹配标准。像这样:

List<string> stringList;
[TestFixtureSetUp]
public void LoadResource(){
    stringList = new List<string>;
    string line;
    using (StreamReader file = new Streamreader("file.txt"){
        while ((string line = file.ReadLine()) != null) {stringList.Add(line);}
    }
}

当我第一次对单个项目进行正常测试时,stringList 已被 LoadResource 填充,并且测试运行良好:

[Test]
    Public void Test0(){
    string line = stringList[0];
    //specialized tests here
    GenericTest(line);
}

但是以下测试在访问 stringList 时返回空异常:

public IEnumerable<string> GetStrings(){
    foreach (string line in stringList){
        yield return line;
    }
}
[Test, TestCaseSource("GetStrings")]
public void loopedTests(string line){
    GenericTest(line);
}

我在这里错过了什么?我假设枚举器有一些东西,这意味着它们必须在创建类时包含有效的引用,但是为什么 - 以及如何最好地修复它?

在 TextFixtureSetup 中初始化的变量未被使用 IEnumerable 的测试读取

看起来这是 NUnit 框架中的一个错误。TestCaseSource方法将在TestFixtureSetup方法之前调用。

您可以在GetStrings中执行一些延迟加载,而不是像这样使用TestFixtureSetup

public IEnumerable<string> GetStrings(){
    if (stringList == null)
       LoadResource();
    foreach (string line in stringList){
        yield return line;
    }
}