【问题标题】:Data Driven Test on Visual Studio using a complex serialized object使用复杂序列化对象在 Visual Studio 上进行数据驱动测试
【发布时间】:2014-03-25 19:04:42
【问题描述】:

我想知道我想做的事情是否可能。我有一个由 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.,因为它不是“标量”,而是有很多维度...

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

我知道我可以将它全部封装在 CDATA 中,然后对其进行反序列化,但是,它并不那么优雅。

谢谢!

【问题讨论】:

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


    【解决方案1】:

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

    将测试方法装饰为[Theory][ClassData] 可以让您指定任意复杂的源,让您处理您希望如何反序列化(在本例中)您的XML 源。然后,您可以将预期结果作为测试方法的参数注入。您还将遍历对象的“行”,并且再次由您来定义要视为行的内容。

    嗯,我不确定它是否很容易理解,但你应该看看this small blog post,它通过示例清楚地解释了你如何处理它。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-16
      • 2010-10-07
      • 2011-05-02
      • 2019-02-09
      • 2016-11-13
      • 2012-05-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多