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 に答える