2017-01-03 4 views
1

私は2つのXMLファイルを持っていると私は次のテスト使用のxUnitを使用してそれらを比較しています:JUnitは - 2つのXML文書が同一であることを比較

@Test 
public void testSortXML() throws IOException 
{ 
    field = "userid"; 
    outputStream = new ByteArrayOutputStream(); 
    xmlStreamSorter.sort(inputStream, outputStream, comparator); 
    ByteArrayInputStream expected = new ByteArrayInputStream("<?xml version=\"1.0\" encoding=\"UTF-8\"?> <users><user><userid>10</userid></user><user><userid>3</userid></user><user><userid>1</userid></user></users>" 
      .getBytes()); 

    System.out.println(outputStream); 
    Assert.assertThat(expected, CompareMatcher.isIdenticalTo(outputStream)); 

} 

をしかし、テストは次のエラーで失敗します。

Expected child nodelist length '3' but was '0' - comparing <users...> at /users[1] to <byteArrayOutputStream...> at /byteArrayOutputStream[1] (DIFFERENT) 

<?xml version="1.0" encoding="UTF-8"?> 
<users> 
    <user> 
    <userid>10</userid> 
    </user> 
    <user> 
    <userid>3</userid> 
    </user> 
    <user> 
    <userid>1</userid> 
    </user> 
</users> 

彼らが同一である:

これは、出力変数の内容です。どのようにテストが失敗するのですか?

+0

を:ちょうどカスタムの差分をこのように作成するのxUnit 2.xのでそれを行うに あなたは「予想される」ものと確認;たとえばファイルに書き込まれたときに...本当に他のファイルを「ソート」した後の内容と一致しますか? – GhostCat

+0

@GhostCat私はoutputStreamの内容をコピーし、除外されたbytearrayに貼り付けました。 – user3727540

+0

@RO_engineer私もこれをしました\t \t Assert.assertThat(expected.toString()、CoreMatchers.equalTo(outputStream.toString())); でも同じ結果が得られました – user3727540

答えて

2

問題は、空白を無視していないということでした。

Diff xmlDiff = DiffBuilder.compare(expected) 
    .withTest(outputStream.toString()) 
    .ignoreComments() 
    .ignoreWhitespace() 
    .build(); 

そして、あなたがこれを行うことができます:念のために

Assert.assertFalse(
    "The resulting XML is not correctly sorted", 
    xmlDiff.hasDifferences() 
); 
関連する問題