我想知道我想做什么是可能的。我有一个由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中然后反序列化它,但是,它并不优雅。
谢谢!
答案 0 :(得分:0)
我建议using XUnit
和XUnit.Extensions
,都可以通过nuget获得。
将测试方法装饰为[Theory]
和[ClassData]
将允许您根据需要指定一个复杂的源,让您处理您希望反序列化的方式(在此处为此情况)您的XML源。然后,您可以将预期结果作为测试方法的参数注入。您还将遍历&#34;行&#34;对象,您可以再次定义要作为行处理的内容。
嗯,我不确定它是否易于理解,但你应该看一下this small blog post,它清楚地用例子解释你是如何处理它的。
结论:XUnit是一个很好的测试框架,并且可以很好地与Visual Studio测试面板等集成。语法也大致相同。另外,它是免费的。