我们可以在 XML 数据源中的数据驱动测试中读取内部 xml 节点吗?



如果我有这个代码示例,使用 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 &lt;IN&gt; FTXT</Expression>
    </Query>
  </Input>
  <Output>
    <someOut>ss</someOut>
  </Output>
</Test>
<Test>
  <Input>
    <Query>
      <Expression>laser &lt;IN&gt; 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 &lt;IN&gt; FTXT</Expression1>
    <someOut1>ss<someOut1>
    <Expression2>laser &lt;IN&gt; 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多年来一直不关心这个限制。

我不确定您的单元测试有多广泛,但是如果您要验证XML是否与某些"控制"数据集匹配,那么您需要使用数据集。 我目前正在针对"已知良好"的事务查询、SQL 表或数据集对 SSRS 报告进行单元测试。数据集中的 XML 被分解为具有节点名称的逻辑数据表。您现在可以调用节点的名称(数据表)、行索引、列名、单元格等。

最新更新