2017-10-09 11 views
0

Spring MVC Webサービスから返されたJSON結果でLocalDateオブジェクトを検証しようとしていますが、どうしたらよいかわかりません。Spring MockMVCでJSON応答でLocalDateを検証する

私は常に次のいずれかのようアサーションエラーに遭遇する瞬間:

java.lang.AssertionError: JSON path "$[0].startDate" Expected: is <2017-01-01> but: was <[2017,1,1]>

私のテストの重要な部分は、以下の掲示されます。任意のアイデアをどのように渡すためにテストを修正するには?

import static org.springframework.test.web.servlet.setup.MockMvcBuilders.standaloneSetup; 

public class WebserviceTest { 

    @Mock 
    private Service service; 

    @InjectMocks 
    private Webservice webservice; 

    private MockMvc mockMvc; 

    @Before 
    public void before() { 
     mockMvc = standaloneSetup(webservice).build(); 
    } 

    @Test 
    public void testLocalDate() throws Exception { 
     // prepare service mock to return a valid result (left out) 

     mockMvc.perform(get("/data/2017")).andExpect(status().isOk()) 
      .andExpect(jsonPath("$[0].startDate", is(LocalDate.of(2017, 1, 1)))); 
    } 
} 

Webサービスは、次のように見ているビューオブジェクトのリストを返します:

public class ViewObject { 

    @JsonProperty 
    private LocalDate startDate; 
} 

を[編集]

もう一つの試みは、

の結果

.andExpect(jsonPath("$[0].startDate", is(new int[] { 2017, 1, 1 }))) 

ました

java.lang.AssertionError: JSON path "$[0].startDate" Expected: is [<2017>, <1>, <1>] but: was <[2017,1,1]>

[編集2] 返されたstartDateオブジェクトは、タイプのものであると思わ:net.minidev.json.JSONArray

答えて

0

これは方法です。おかげで「アミットKビストは」正しい方向

... 
.andExpect(jsonPath("$[0].startDate[0]", is(2017))) 
.andExpect(jsonPath("$[0].startDate[1]", is(1))) 
.andExpect(jsonPath("$[0].startDate[2]", is(1))) 
0

私はそのレベルであなたがJSONない解析されたオブジェクトを検証していると思います。だからあなたは文字列を持っていて、LocalDateはありません。 JSONレスポンスでLOCALDATEは "たstartDate" のようになります

... 
.andExpect(jsonPath("$[0].startDate", is("2017-01-01")))); 
+0

これはにjava.lang.AssertionErrorに結果に私を指すようにする:JSONパス「$ [0] .startDate」期待 は:「2017年1月1日」であります しかし:<[2017,1,1]> – GreenTurtle

1

そこで、基本的にあなたのコードを変更してみてください

ので
"startDate": { 
    "year": 2017, 
    "month": "JANUARY", 
    "dayOfMonth": 1, 
    "dayOfWeek": "SUNDAY", 
    "era": "CE", 
    "dayOfYear": 1, 
    "leapYear": false, 
    "monthValue": 1, 
    "chronology": { 
     "id": "ISO", 
     "calendarType": "iso8601" 
    } 
} 

、あなたは以下のように各属性を確認してください:

.andExpect(jsonPath("$[0].startDate.year", is(2017))) 
       .andExpect(jsonPath("$[0].startDate.dayOfMonth", is(1))) 
       .andExpect(jsonPath("$[0].startDate.dayOfYear", is(1))) 
+0

jsr310を使用していることに気づかず、上記のようにnon-jsr310 localdate –

+0

の場合にのみ動作します。申し訳ありません:java.lang.AssertionError:JSONパス "$ [0] .startDate.year"例外:パス$ [0] ['startDate']にプロパティ['year']を持つオブジェクトが見つかりましたが、 'net.minidev.json.JSONArray'が見つかりました。これはJsonProviderによるjsonオブジェクトではありません: 'com.jayway.jsonpath.spi.json.JsonSmartJsonProvider'。 – GreenTurtle

+0

私を正しい方向に向けてくれてありがとう。 +1 – GreenTurtle

関連する問題