1

setIgnoreWhitespace を使用して XML 内の空白を無視するように xmlunit を取得するのに問題があります。

JVM: 1.6、XMLUnit 1.3、IDE: JDeveloper 11.1.1.6

たとえば、以下は「予想される子ノードの数は '2' でしたが、'1' でした」を返します。余分なスペースを取り除くと、それは通過します。

@Test
public void testExample()  {
    String inputXML = "<test><innertest>data</innertest></test>";
    String expectedResultXml = "<test> <innertest>data</innertest></test>";

    XMLUnit.setIgnoreWhitespace(true);
    XMLUnit.setIgnoreComments(true);
    XMLUnit.setIgnoreDiffBetweenTextAndCDATA(true);

    try {
        assertXMLEqual("Did not match!!", expectedResultXml, inputXML);
    } catch(Exception e) {}
}
4

3 に答える 3

2

クラスパスに互換性のない XML ライブラリが必要です。以下のように JAXP ライブラリをオーバーライドすると、問題が解決されました (xerces および xalan jar も追加されました)。

    XMLUnit.setControlParser("org.apache.xerces.jaxp.DocumentBuilderFactoryImpl");
    XMLUnit.setTestParser("org.apache.xerces.jaxp.DocumentBuilderFactoryImpl");
    XMLUnit.setSAXParserFactory("org.apache.xerces.jaxp.SAXParserFactoryImpl");
    XMLUnit.setTransformerFactory("org.apache.xalan.processor.TransformerFactoryImpl"); 
于 2012-12-12T11:21:15.703 に答える
1

空白文字が無視されることを期待しているように見えますが、その設定には当てはまりません。

参照XMLUnit.setIgnoreWhitespace:

ノード値を比較するときに空白を無視するかどうか。

[...]

このパラメーターを設定しても、テキスト内の空白には影響しません。

この設定は、空白のみのテキスト ノードが削除される (チェックされない) という意味ではありません。<test>要素のノード値を比較するときに空白が無視されることを意味するだけです。しかし、そのテストはメッセージを引き起こしませんでした。あなたの場合、子ノードの数をチェックするとメッセージが発生しました。

3.8.1を参照してください。より詳細な説明とその他の設定オプションについては、空白の処理XMLUnit.setNormalizeWhitespace(例: )。

于 2012-12-12T12:45:16.393 に答える
-1

@ user392909 のように JAXP ライブラリをオーバーライドしても、うまくいきませんでした。

しかし、私のプロジェクトの別のライブラリとの競合が根本的な原因でした。最初に、いくつかのライブラリのインポート順序を変更し、最終的にテストを修正しました。そのため、競合するライブラリを特定できました。j2ee.jar でした。

私はそれを削除しました(そして、今後のコンパイルエラーを解決するために tomcat-catalina.jar、tomcat-juli.jar、および javamail.jar に置き換える必要がありました)。

j2ee.jar が削除/置換され、xml diff が期待どおりに機能するようになったため、インポートの順序はもはや重要ではありません。

于 2015-09-24T13:43:42.133 に答える