XML をデータソースとして使用するこのコード サンプルがあるとします。
[DeploymentItem("Ita_ResultArea_CompaniesList\\snapshot.xml")]
[DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML",
"|DataDirectory|\\Ita_ResultArea_CompaniesList\\snapshot.xml",
"Test", DataAccessMethod.Sequential)]
[TestMethod]
public void Ita_ResultArea_Tdd_MinimalRequest()
{
var input = TestContext.DataRow["Input"];
Assert.IsNotNull(input);
}
TestContext.DataRow["Input"]から内部ノードを読み取れないのはなぜですか?
XML コンテンツは次のとおりです。
<TestData>
<Test>
<Input>
<Query>
<Expression>laser <IN> FTXT</Expression>
</Query>
</Input>
<Output>
<someOut>ss</someOut>
</Output>
</Test>
<Test>
<Input>
<Query>
<Expression>laser <IN> FTXT</Expression>
</Query>
</Input>
<Output>
<someOut>ss</someOut>
</Output>
</Test>
</TestData>
MSDN フォーラムで、多くのレベルの xml ファイルを読み取ることができないというスレッドをいくつか見つけました。次のような簡単な例です。
<TestData>
<Test>
<sample1>some text</sample1>
<sample2>some test</sample2>
</Test>
</TestData>
このように TestContext.DataRow["sample1"]は正常に動作します。
更新 結果として、次の方法でxmlファイルを処理しました(ソースxmlを見てください):
<TestData>
<Test>
<Expression1>laser <IN> FTXT</Expression1>
<someOut1>ss<someOut1>
<Expression2>laser <IN> FTXT</Expression2>
<someOut2>ss<someOut2>
</Test>
<!-- another test data-->
<Test>
<Expression1>lorem ipsum</Expression1>
<someOut1>found<someOut1>
<Expression2>oneWord</Expression2>
<someOut2>found<someOut2>
<Expression3>long data</Expression3>
<someOut3>found<someOut3>
</Test>
</TestData>
ご覧のとおり、これはあまり優れた解決策ではありませんが、手作りの回避策です。xml の内部レベルを最初のレベルのみに結合し、意味のあるデータのみを取得しました。そのため、テストを実行する .NET コードでは、テスト データを使用して完全な階層を手動で復元する必要があります。
私は会社で同僚から批判されましたが、別の方法はBClaydonが提案したとおりでした。
Microsoft は、この制限について何年も気にしていないようです。