1

我想知道我想做的事情是否可行。我有一个由 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"],我得到 aColumn 'MyComplexRow' does not belong to table TestMember.因为它不是“标量”,而是有很多维度......

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

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

谢谢 !

4

1 回答 1

0

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

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

嗯,我不确定它是否很容易理解,但你应该看看这个小博客文章,它通过示例清楚地解释了你如何处理它。

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

于 2014-05-16T17:39:20.507 回答