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