2

我正在用 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 时会返回 null 异常:

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

[Test, TestCaseSource("GetStrings")]
public void loopedTests(string line){
    GenericTest(line);
}

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

4

1 回答 1

4

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

你可以做一些延迟加载GetStrings而不是使用TestFixtureSetup这样的:

public IEnumerable<string> GetStrings(){

    if (stringList == null)
       LoadResource();

    foreach (string line in stringList){
        yield return line;
    }
}
于 2012-06-13T22:48:31.087 回答