如何使用XmlUnit打印两个XML文档之间的所有差异?
如何打印XmlUnit对比XML的所有差异
嘿,我之前也碰到过这个问题!默认的myDiff.ToString()确实只会输出部分核心差异的摘要,没法展示所有细节。要获取并打印两个XML之间的全部差异,你需要直接遍历XmlUnit返回的差异集合,而不是只依赖ToString()方法。
解决方案代码示例
修改你的代码,通过GetDifferences()方法获取所有差异对象,然后逐个输出详细信息:
string control = "<a><b attr=\"abc\"></b></a>"; string test = "<a><b attr=\"xyz\"></b></a>"; var myDiff = DiffBuilder.Compare(Input.FromString(control)) .WithTest(Input.FromString(test)) .Build(); if (myDiff.HasDifferences()) { // 遍历所有差异并打印细节 var differences = myDiff.GetDifferences(); foreach (var diff in differences) { Console.WriteLine($"[差异类型] {diff.Type}"); Console.WriteLine($"[差异描述] {diff.Description}"); Console.WriteLine($"[控制XML节点] {diff.ControlDetails.Target}"); Console.WriteLine($"[测试XML节点] {diff.TestDetails.Target}"); Console.WriteLine("------------------------"); } Assert.Fail($"共发现 {differences.Count()} 处XML差异"); }
关键说明
GetDifferences()方法会返回一个包含所有Difference对象的集合,每个对象都存储了差异的完整信息:Type:标记差异的类别(比如属性值不匹配、节点缺失、文本内容不同等)Description:差异的人类可读描述ControlDetails.Target/TestDetails.Target:分别指向控制XML和测试XML中产生差异的具体节点
- 这种方式能确保你不会遗漏任何细微差异,比默认的
ToString()输出全面得多。
内容的提问来源于stack exchange,提问作者Frederic
相关产品推荐
相关产品推荐

