在 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);
}
我在这里错过了什么?我假设枚举器有一些东西,这意味着它们必须在创建类时包含有效的引用,但是为什么 - 以及如何最好地修复它?
看起来这是 NUnit 框架中的一个错误。TestCaseSource
方法将在TestFixtureSetup
方法之前调用。
您可以在GetStrings
中执行一些延迟加载,而不是像这样使用TestFixtureSetup
:
public IEnumerable<string> GetStrings(){
if (stringList == null)
LoadResource();
foreach (string line in stringList){
yield return line;
}
}