如果我有这个代码示例,使用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 [“输入”] 读取内部节点?
下一步是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 提出。
似乎微软多年来一直不关心这种限制。
答案 0 :(得分:1)
我不确定您的单元测试有多广泛,但如果您要验证您的XML是否符合某些控件的要求?数据集然后您将要使用数据集。我目前正在对SSRS报告进行单元测试,以反对已知的好消息&#39;事务查询,SQL表或数据集。数据集中的XML被分解为具有节点名称的逻辑数据表。您现在可以调用节点的名称(数据表),行索引,列名称,单元格等。