我有一堆需要检查XML输出的单元测试。
我已经开始比较字符串,但这不会扩展,因为格式化和表面差异会妨碍。
.NET中最简单的方法是评估生成的XML在语义上是否与测试期望的相同?
的副本
答案 0 :(得分:11)
Microsoft提供了XML Diff工具/类here。我没有亲自使用它,但听起来它会让你开始:
“通过使用XMLDiff类, 程序员能够确定是否 两个文件实际上是不同的 在重要的条件下 他们的申请“
似乎可以处理不同的排序,间距,名称空间前缀等。
答案 1 :(得分:5)
这是一个听起来很容易入手的问题之一,但是你越挖掘你在问题空间中找到的深度就越多。
有许多预先存在的工具可用于xml差异 - 以GUI方式(与文本差异工具相同的行)和命令行驱动/组件(这些都是你的更多)之后)。 XMLDiff就是这样一种情况,正如已经提到的那样。
当您提出类似问题时,问题就开始了 - 我想要输出什么?您是否只想要一个返回代码,说明它们是相同还是不同(为了单元测试目的,这实际上可能就足够了) - 或者您是否想要一个能够告诉您差异的报告? (如果你想找到问题是什么,也可以用于单元测试)?如果是后者,您希望如何获得这些信息?你想编辑距离吗? 您是否希望它解释数值并告诉您它们之间的区别?
节点排序怎么样?子节点是否应按特定顺序排列 - 或者如果它们是相同的节点但是顺序不同,那么可以吗?
您可能还希望能够指定要比较的内容。命名空间应该匹配吗?空白是否在任何地方都很重要?您是否总是想要忽略某些节点(例如“时间”属性),或者您是否希望对哪些节点进行更精细的控制以及哪些节点不进行比较?
对于数值比较,您是否希望允许公差?对于文本比较(文本节点), 中的空格是否显着?资本化怎么样?
你可以继续下去(正如我在最近工作的这样一个项目的分析中所做的那样)。
每种工具都以不同程度和不同方式解决这些问题。
您可能决定尽可能保持简单,并选择直接,逐节点,比较,无需解释的内容 - 最后告诉您它们是相同还是不同。我相信xmldiff会给你(还有一点)。
另外值得考虑的是,如果您确实想要处理不同节点排序等情况,或忽略某些分支,您可以在比较之前将xslt变换应用于测试文档,以根据您的规则对其进行规范化。 / p>