単体テストの属性の評価後に実行される単体テストの classinitilalize メソッドに問題があります。これらのテストは、[classinitialize] メソッドを使用して、xml ファイルにランダムなデータ セットを作成するテスト セットを生成します。xml ファイルは、属性 [datasource] を持つ単体テストによって使用されます。これの縮小バージョンは次のようになります。
[ClassInitialize]
public static void Initialize(TestContext context)
{
// Create xml output file
var output = new XDocument(new XElement("Rows"));
foreach (var Code in Codes)
{
if (output.Root != null)
output.Root.Add(new XElement("Row", new XElement("Code", Code)));
}
output.Save("TestData.xml");
}
[DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML",
"|DataDirectory|\\TestData.xml",
"Row",
DataAccessMethod.Sequential)]
[TestMethod]
public void TestStuff()
{
var Code = (string)TestContext.DataRow["Code"];
TestItem(Code);
}
Visual Studio 2012 Update 3 を使用しています。Sysinternals ツールの Process Monitor を使用して実行順序を確認しました。各メソッドの先頭にブレーク ポイントを設定します。次に、ファイル アクセスを確認しました。私が見た操作の順序。
- vstestexecutionengine によって読み取られる TestData.xml。
- ClassInitialize メソッドが呼び出され、TestData.xml が書き込まれます
- 手順 1 で読み取ったデータを使用して、TestMethod が実行されます (テスト用に偽のデータを含むファイルを追加しました)。
だから私の質問は、xml ファイルが読み込まれる前に classinitialize が実行されていないことは何ですか? それとも私がやろうとしていることは不可能ですか?