XML单元测试框架适用于MSTest

3
我们需要验证我们生成的XML文档的内容。是否有任何框架可以帮助提取和验证文档的内容,并使其变得容易?
我们需要知道以下几点:
- 是否包含x元素 - 元素x的值 - 元素x是否包含具有值为z的属性y - 意外出现的元素
如果没有断言,也没关系,这可以通过MSTest完成。

你有XML的XSD吗? - Mike Parkhill
我宁愿不依赖于 XSD。目前我们需要进行一些后处理才能包含具有默认值的属性。我更喜欢一些可以查询文档的东西。也许只是一些基于 LINQ to XML 的帮助程序。 - Ryan Burnham
我询问 XSD 的唯一原因是它可以轻松生成 POCO 代码。一旦您将 XML 反序列化为对象,验证内容就变得微不足道了。反序列化的行为本身就有助于验证格式。 - Mike Parkhill
我明白了,那应该可以。可以举些例子吗? - Ryan Burnham
2个回答

6
请查看Fluent Assertions库文档:https://fluentassertions.com/introduction。其中的“XML classes”部分似乎是您需要的内容。代码使用LINQ-to-XML技术实现。
xDocument.Should().HaveRoot("configuration");
xDocument.Should().HaveElement("settings");

xElement.Should().HaveAttribute("age", "36");
xElement.Should().HaveElement("address");

xAttribute.Should().HaveValue("Amsterdam");

您可以从Nuget安装FluentAssertions,链接在这里:http://nuget.org/packages/FluentAssertions

看起来正是我想要的,我得试一试。 - Ryan Burnham

1

你也可以使用类似 xsd.exe(与VS一起提供的工具)从XSD文件中生成C#实体,以便于XML的操作。

一旦生成了对象,您就可以使用XmlSerializer的实例对XML进行反序列化。如果无法对XML进行反序列化,则很快就会发现您的XML无效。

之后,您应该可以通过处理反序列化实体的各种属性,相对容易地验证XML内容。

这是一篇关于从XSD生成实体对象的好入门博客文章,它展示了使用XmlSerializer进行简单反序列化代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接