如果我有这个代码示例,使用 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提出的。
似乎微软多年来并不关心这个限制。