2016-10-27 10 views
2

私は受け入れテストから2つの属性をスキップしたかったので、2つの属性を削除するために次の部分を追加しました。これは私にエラーを与えます: junit.framework.AssertionFailedError:org.custommonkey.xmlunit.Diff [要素の数は '2' の属性が、XMLファイルの '1' がJavaでXMLUnitでテストから属性を削除するにはどうすればよいですか?

パートだった:

<a:content schemaVS="1" 
a:schemaLocate="http://www.ContentXML.xsd" 
whiteSpaceMode="preserve"> 
<section type="Chapter" id="drd121"> 
    <p type="H1">This is H1.</p> 
</section> 

のJava実装の一部:

public Document removeIgnoredCxmlNodes(Document resultDocument) { 

Element contentElement=(Element) resultDocument.getElementsByTagName("a:content").item(0); 
contentElement.removeAttribute("schemaVS"); 
contentElement.removeAttribute("a:schemaLocate"); 
return resultDocument; 

}

public void cxmlShouldBeProduced(String location) throws Throwable { 
try { 
    Document expectedDocument = parseDocument(RESOURCES_DIR_PATH.resolve(location)); 
    Document resultDocument = removeIgnoredCxmlNodes(parseDocument(resultCxmlPath)); 
    assertXMLEqual(expectedDocument, resultDocument); 
    } catch (NullPointerException e) { 
     e.printStackTrace(); 
    } 

}

+0

には、XMLへの2つの文書を印刷することができますようにあなたはDifferenceEvaluatorが、「属性フィルタ」を使用していないのでしょうか?明らかにXMLUnitは彼らが違うと感じています。これは真実かもしれませんが、それが許容できる場合は、以下に示すように@ DifferentialListenerを使用してください。 –

答えて

1

これがDifferenceListenerのデフォルトの実装を使用した結果です。比較で特定のタイプの差異を無視するように指定するには、独自の実装を提供する必要があります。

次の例は、XMLUnit 1の例です。まだ2は使用していませんが、解決策はほとんど同じであると私は理解しています。 XMLUnit 2.Xについて

public class DifferenceListenerImpl implements DifferenceListener { 
    @Override 
    public int differenceFound(Difference d) { 
    if (d.getId() == DifferenceConstants.ELEMENT_NUM_ATTRIBUTES_ID) { 
     return RETURN_IGNORE_DIFFERENCE_NODES_SIMILAR; 
    } 
    // handle other difference types here 
    } 

    @Override 
    public void skippedComparison(Node control, Node test) { 
    // not needed 
    } 
} 
+0

これは抽象クラスですか? – user2490093

+0

'DifferenceListener'はXMLUnit 1のインタフェースです。その2の等価物は 'DifferenceEvaluator'です。実装は具体的なクラスです。 – jsheeran

+0

DifferenceListenerクラスを作成するときにエラーが発生しました.Eclipseはこれを抽象メソッドに変換するか、次のメソッドを追加することを提案しています。public void skippedComparison(Node arg0、Node arg1){ \t \t // TODO自動生成メソッドスタブ \t \t \t} – user2490093

2

DiffBuilder b = DiffBuilder.compare(some-onput) 
    .withTest(some-test) 
    .withAttributeFilter(a -> { 
     QName attrName = Nodes.getQName(a); 
     return !a.equals(new QName("schemaVS")) 
      && !a.equals(new QName(schema-uri-of-a, "schemaLocate")); 
    }) 
    ... 
+0

私のプロジェクトでxmlunit-1.6.jarを設定しましたが、DiffBuilderを解決することができません。この本体をquestion.Amに記載されている 'removeIgnoredCxmlNodes'メソッド内で使用しましたか? – user2490093

+0

XMLUnit 1.6には 'DiffBuilder'がありません。そのため、私は「XMLUnit 2.xで」と言いました。あなたが古い1.6を守ることを余儀なくされたなら、@ jsheeranの答えのような何かがあなたがしなければならないことです。 –

関連する問題