2016-06-02 3 views
0

내 웹 사이트의 REST API 부분에 대한 테스트 사례를 작성하려고합니다. 내가 dropwizard를 사용합니다.Dropwizard에서 비교하는 방법 json의 날짜

@Test 
public void getAll(){ 
    assertThat(resources.client().target("/blogcomments").request().get(List.class)) 
      .isEqualTo(GsonInstance.INSTANCE.getGson().toJson(list)); 
    verify(dao).getAll(list); 
} 

는 그리고 내가 무엇을 얻을 것은 다음과 같이이다 : 위의 assert에서

[{"comment"="comment", "date"=1464906153750L, "id"=1, "name"="name", "url"="url"}]

, 나는 실제로 내가 [[email protected]]을 사용하고, 비교하는 객체를 사용하는 경우.

이 같은 JSON으로 개체를 변환하는 GSON를 사용하는 경우 : 내가 가진 무엇

@Test 
public void getAll(){ 
    assertThat(resources.client().target("/blogcomments").request().get(List.class)) 
      .isEqualTo(GsonInstance.INSTANCE.getGson().toJson(list)); 
    verify(dao).getAll(POJOs.BlogCommentPOJO.toString()); 
} 

은 다음과 같습니다

org.junit.ComparisonFailure: Expected :"[{"id":1,"url":"url","comment":"comment","date":"Jun 2, 2016 6:27:50 PM","name":"name"}]" Actual :[{"comment"="comment", "date"=1464906470531L, "id"=1, "name"="name", "url"="url"}]

어떻게 날짜 형식을 처리하기 위해? 두 JSON이 같은지 비교하는 방법은 무엇입니까?

답변

1

첫째, 당신은 실제예상String 표현을 비교하는 것을 시도 할 것으로 보인다. 나는 당신이 POJO의 hashCode()equals() 메쏘드를 재정의하고 내부 클래스를 제안 할 것이다. 그런 다음 assertEquals을 사용하여 테스트 케이스의 객체를 비교하십시오. 당신이 String 표현을 비교해야하는 경우는 다음과 같이 할 수 있습니다, 어떤 이유로,

그러나 (또한 debuggability에 대한 toString을 무시) : (그래도 난 그것을 권하고 싶지 않다)

  • 쓰기 사용자 정의 시리얼 라이저/디시리얼라이저 . Gson을 사용하는 경우 다음을 확인하십시오. Gson custom seralizer for one variable (of many) in an object using TypeAdapter
  • Dropwizard는 기본적으로 Jackson을 사용합니다. 그래서, 대안으로 여러분은 테스트 케이스에서 Dropwizard가 사용하는 동일한 ObjectMapper을 가져 와서 serialiser에 사용할 수 있습니다. 과 일치해야합니다.
+0

정말 고마워요! 정말 이유는 Gson과 dropwizard의 다른 전략입니다. ObjectMapper.readValue works – SmartFingers

+0

@SmartFingers 도움이되는 답변을 찾으면 "받아 들여"제안하십시오. –