2013-01-04 8 views
4

두 개의 JSON 객체를 비교하기 위해 Hamcrest Matcher를 사용하고 있습니다. compare 메서드는 Gson 파서를 사용합니다. , 난이 일치하지 않는 요소를 보여 드리고자, 매우 도움이되지 않습니다junit 스타일 diff가있는 Hamcrest Matcher

Expected: <[{"data":"data1","application":{"id":"1"}}]> 
    but: <[{"data":"data1","application":{"id":"2"}}]> 

:

매처 잘 작동하지만이 JSON이 동일하지 않을 때, 난 단지 같은 메시지를 표시 할 수 있어요 junit의 주장과 같은 것 같습니다 :

expected:<...a1","application":{"[filtered":false,"id":"1"]...> but was:<...a1","application":{"[id":"2"...> 

달성 할 수있는 방법이 있습니까?

편집 :

@Override 
protected void describeMismatchSafely(JsonElement item, 
             Description mismatchDescription) { 
    //mismatchDescription.appendValue(item); 
    assertEquals(item.toString(), originalJson.toString()); 
} 

그러나이 나에게 줄 것 : 및 "ID : 2"유일한 차이는 "1 ID"에 있음을

expected:<...a1","application":{"[filtered":false,"id":"2"]...> 
but was:<...a1","application":{"[id":"1","filtered":false],...> 

공지하지만 JUnit을 나에게 보여줍니다 오류의 일부로 JSON의 다른 순서도.

답변

2

내가 지금까지 할 수있는 가장 좋은 :

@Override 
protected void describeMismatchSafely(JsonElement expectedJson, 
             Description mismatchDescription) { 

    mismatchDescription.appendValue(expectedJson).appendText("\ndifference:\n"); 

    try { 
    assertEquals(expectedJson.toString(), originalJson.toString()); 
    } 
    catch (ComparisonFailure e) { 
    String message = e.getMessage(); 
    message = message.replace("expected:", ""); 
    message = message.replace("but was:", ""); 
    message = message.replaceFirst(">", ">\n"); 
    mismatchDescription.appendText(message); 
    } 
} 

이 나에게

Expected: <[{"data":"data1","application":{"id":"1"}}]> 
    but: <[{"data":"data1","application":{"id":"2"}}]> 
difference: 
<...a1","application":{"[filtered":false,"id":"2"],...> 
<...a1","application":{"[id":"1","filtered":false],...> 
을 제공합니다