0

我需要有关 ComparisonFormatter 的帮助。我无法在网上找到很多关于 ComparisonFormatter 的示例。

我正在使用 XMLUnit 2.8.2。我正在尝试比较两个 xml 文件,而不管它们的顺序如何。当响应有序或不有序时,下面的代码可以正常工作。问题是当响应不匹配时。例如,当 INFOId 在控制响应中等于 FQ001 和在测试响应中等于 FA001 时。在这种情况下,我得到响应“ [Expected child 'INFO' but was 'null' - comparison <INFO...> at ...etc ” 经过一番研究,我发现我应该使用 ComparisonFormatter 来获得更详细的响应. 有人可以给我一些如何使用ComparisonFormatter的例子吗?如果使用 ComparisonFormatter 不是正确的方法,那么请引导我走向正确的方向。

String controlXml = "<Return><INFO><Area>0</Area><INFOId>AA23414</INFOId></INFO><INFO><Area>0</Area><INFOId>FQ001</INFOId></INFO></Return>";
String testXml    = "<Return><INFO><Area>0</Area><INFOId>FA001</INFOId></INFO><INFO><Area>0</Area><INFOId>AA23414</INFOId></INFO></Return>";



         DiffBuilder builder = DiffBuilder.compare(controlXml).withTest(testXml)
                    .checkForSimilar()
                    .ignoreWhitespace()
                    .normalizeWhitespace()
                    .ignoreComments()
                    .checkForSimilar()  
                    .withNodeMatcher(new DefaultNodeMatcher(ElementSelectors.conditionalBuilder()
                    .whenElementIsNamed("INFO")
                    .thenUse(ElementSelectors.byXPath("./INFOId", ElementSelectors.byNameAndText))
                            .elseUse(ElementSelectors.byName)
                    .build()));


        int i = 0;
        org.xmlunit.diff.Diff diff = builder.build();
        if (diff.hasDifferences()) 
        {                                       
            System.out.println(diff.getDifferences());               
                i++;
        }
        System.out.println("Size = " +i);

提前致谢!任何帮助将不胜感激。

4

1 回答 1

0

很久以前,我也有同样的问题。xmlunit-2 可以选择在比较之前对节点进行排序。

    String controlXml = "<struct><int>3</int><boolean>false</boolean></struct>";
    String testXml = "<struct><boolean>false</boolean><int>3</int></struct>";
    
    assertThat(testXml, 
      isSimilarTo(controlXml).withNodeMatcher(
      new DefaultNodeMatcher(ElementSelectors.byName)));
于 2021-09-21T15:49:04.983 回答