使用复杂的序列化对象在Visual Studio上进行数据驱动测试

时间:2014-03-25 19:04:42

标签: c# xml visual-studio data-driven-tests

我想知道我想做什么是可能的。我有一个由xml驱动的单元测试,如下所示:

[DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML", 
            "|DataDirectory|\\MyFile.xml", 
            "TestMember", 
            DataAccessMethod.Sequential)]
[DeploymentItem("MyFile.xml")]
[TestMethod]
public void Hello()
{
    ...
}

其中MyFile.xml如下所示:

<TestMembers>
  <TestMember>
    <Name>Hello</Name>
    <id>1234</id>
    <MyComplexRow>
      <MySerializedInstanceOfClass>
        <BooleanProperty>true</BooleanProperty>
        <IntProperty>8</IntProperty>
        <MySerializedInstanceOfAnotherClass>
          <int>23</int>
          <bool>false</bool>
          <double>8.0</double>
        </MySerializedInstanceOfAnotherClass>
      </MySerializedInstanceOfClass>
    </MyComplexRow>
  </TestMember>
</TestMembers>

现在问题是访问TestContext.DataRow["Name"]工作正常,但我无法访问TestContext.DataRow["MyComplexRow"],我得到Column 'MyComplexRow' does not belong to table TestMember.,因为它不是&# 34;标量&#34;,但有很多维度......

那么,有什么方法可以欺骗Visual Studio让他知道他正在处理现有类的序列化实例?就像,也许扩展现有的类。

我知道我可以将它全部包装在CDATA中然后反序列化它,但是,它并不优雅。

谢谢!

1 个答案:

答案 0 :(得分:0)

我建议using XUnitXUnit.Extensions,都可以通过nuget获得。

将测试方法装饰为[Theory][ClassData]将允许您根据需要指定一个复杂的源,让您处理您希望反序列化的方式(在此处为此情况)您的XML源。然后,您可以将预期结果作为测试方法的参数注入。您还将遍历&#34;行&#34;对象,您可以再次定义要作为行处理的内容。

嗯,我不确定它是否易于理解,但你应该看一下this small blog post,它清楚地用例子解释你是如何处理它的。

结论:XUnit是一个很好的测试框架,并且可以很好地与Visual Studio测试面板等集成。语法也大致相同。另外,它是免费的。