2011-07-05 7 views
6

私は正常にXmlUnitを試しています。さて、私は少し問題がある、私は解決する方法がわからない。私はセットを持っているJavaクラスを持っており、それをXMLに変換するとき、内部の要素は任意の順序を持​​つことができます。類似したxmlファイルとXmlUnitとを、順序付けられていないタグ(属性が異なる同じタグ名)と比較する。

私はそれが動作XmlUnitでこれらの2つのファイル(差分は、彼らが似ていると言っている)してみてください:

<?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> 

をしかし、タグは(異なる属性を持つ)同じ名前を持っている場合、それはありません(それが属性をミックスし、他のタグに1を期待して)仕事:

<?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

私は、コードのこの作品で、自分で解決策を見つけた: \t \tデフデフ=新デフ(controlXml、のresponseXML)。 \t \t diff.overrideElementQualifier(new ElementNameAndAttributeQualifier()); されています;) – greuze

+0

あなた自身で質問への回答を投稿し、その回答を受け入れることができますか?また、問題を解決する場合は、以前の質問に対する回答を受け入れる必要があります。 – Zecas

+0

私は自分の質問に答えられないと思った。私は今自分自身に答えるだろう。 – greuze

答えて

6

自分で解決策を見つけました。溶液上の

Diff diff = new Diff(controlXml, responseXml); 
diff.overrideElementQualifier(new ElementNameAndAttributeQualifier()); 
+0

これはXmlUnit 2.0でどのように行われますか? – lanoxx

0

属性のみでのご注文動作しますが、それはあなたが以下のように同じ要素型の順序に問題がある場合は動作しません。

<CustomerDataSet> 
     <CustomerData> 
      <Key>ACCOUNT_TYPE</Key> 
      <Value>GREEN</Value> 
     </CustomerData> 
     <CustomerData name = "bla"> 
      <Key>EMAIL_ADDRESS</Key> 
      <Value>[email protected]</Value> 
     </CustomerData> 
     <CustomerData> 
      <Key>DATE_OF_BRITH</Key> 
      <Value>01-01-1976</Value> 
     </CustomerData> 
    </CustomerDataSet> 

      <CustomerDataSet> 
     <CustomerData name = "bla"> 
      <Key>EMAIL_ADDRESS</Key> 
      <Value>[email protected]</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を使用することによってこの問題を回避することができます。

3

これはXMLUnit 2.0のために働くようだ:

Diff myDiff = DiffBuilder.compare(Input.fromString(expected)) 
      .withTest(Input.fromString(actual)) 
      .withNodeMatcher(new DefaultNodeMatcher(ElementSelectors.byNameAndAllAttributes)) 
      .checkForSimilar() 
      .build(); 
関連する問題