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