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