我正在尝试成功运行XmlUnit,对我的工作非常有帮助。现在,我有一点问题,我不知道如何解决。我有一个java类,它有一个Set,当它转换为XML时,里面的元素可以有任何顺序。
当我在XmlUnit中尝试这两个文件时,它可以工作(Diff说它们是相似的):
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Monitor>
<AvailableMeasures>
<MeasureDescriptorA name="netInput_mynetwork"></MeasureDescriptorA>
<MeasureDescriptor name="netInput_myothernetwork"></MeasureDescriptor>
</AvailableMeasures>
</Monitor>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Monitor>
<AvailableMeasures>
<MeasureDescriptor name="netInput_myothernetwork"></MeasureDescriptor>
<MeasureDescriptorA name="netInput_mynetwork"></MeasureDescriptorA>
</AvailableMeasures>
</Monitor>
但是当标签具有相同的名称(具有不同的属性)时,它不起作用(它混合了属性,并期望另一个标签中的属性):
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Monitor>
<AvailableMeasures>
<MeasureDescriptor name="netInput_myothernetwork"></MeasureDescriptor>
<MeasureDescriptor name="netInput_mynetwork"></MeasureDescriptor>
</AvailableMeasures>
</Monitor>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Monitor>
<AvailableMeasures>
<MeasureDescriptor name="netInput_mynetwork"></MeasureDescriptor>
<MeasureDescriptor name="netInput_myothernetwork"></MeasureDescriptor>
</AvailableMeasures>
</Monitor>
有解决方法吗?
答案 0 :(得分:6)
我自己找到了解决方案。
Diff diff = new Diff(controlXml, responseXml);
diff.overrideElementQualifier(new ElementNameAndAttributeQualifier());
答案 1 :(得分:3)
这似乎适用于XMLUnit 2.0:
Diff myDiff = DiffBuilder.compare(Input.fromString(expected))
.withTest(Input.fromString(actual))
.withNodeMatcher(new DefaultNodeMatcher(ElementSelectors.byNameAndAllAttributes))
.checkForSimilar()
.build();
答案 2 :(得分:0)
上述解决方案仅适用于属性顺序,但如果您遇到与下面相同的元素类型顺序的问题,它将无效:
<CustomerDataSet>
<CustomerData>
<Key>ACCOUNT_TYPE</Key>
<Value>GREEN</Value>
</CustomerData>
<CustomerData name = "bla">
<Key>EMAIL_ADDRESS</Key>
<Value>MVNO_Automation_8@test.fr</Value>
</CustomerData>
<CustomerData>
<Key>DATE_OF_BRITH</Key>
<Value>01-01-1976</Value>
</CustomerData>
</CustomerDataSet>
<CustomerDataSet>
<CustomerData name = "bla">
<Key>EMAIL_ADDRESS</Key>
<Value>MVNO_Automation_8@test.fr</Value>
</CustomerData>
<CustomerData>
<Key>ACCOUNT_TYPE</Key>
<Value>GREEN</Value>
</CustomerData>
<CustomerData>
<Key>DATE_OF_BRITH</Key>
<Value>01-01-1976</Value>
</CustomerData>
</CustomerDataSet>
但是,您可以使用RecursiveElementNameAndTextQualifier
来解决此问题。