首页 > 解决方案 > DiffBuilder - 忽略元素值但确保 XML 节点存在

问题描述

DiffBuilder用来比较两个 XML 文件。对于给定的元素 Product,我想检查该元素是否存在,但我想忽略它的值。可以使用XmlUnit吗?

无论 Product 元素是否存在,我下面的代码都可以工作,这对我需要的东西不起作用

var differenceBuilder = DiffBuilder
                .Compare(Input.FromDocument(controlXmlFile))
                .WithTest(Input.FromDocument(testXmlDile))
                .WithNodeFilter(n => n.Name != "Product");

标签: c#unit-testingxmlunit

解决方案


在这种情况下,您不想丢弃节点本身,而是丢弃节点之间的差异。您不会为此使用 aNodeFilter而是使用 a DifferenceEvaluator

一个非常简化的版本可能是这样的

.WithDifferenceEvaluator((comparison, outcome) =>
        comparison.ControlDetails.Target.Name == "Product" ? ComparisonResult.EQUAL : outcome
    ) 

但是您需要考虑到ControlDetails可能是null(并TestDetails改为查看)例如。如果您的Product节点有子元素,您可能希望将它们过滤掉NodeFilter或检查当前比较目标的任何父节点是否已命名Product


推荐阅读