2017-02-02 1 views
0

私は、オブジェクトのリストを返すMockMVCテストを持っています。私はこの特定のプロパティが正しく設定されていることを確認しようとしています。どのようにしてMockMvc Sp​​ring Testのオブジェクトリストに一致するのですか?

しかし、私はそれを明示的に追加することを除いて、何らかの方法で一致させることはできません。 KeyPairはキー値を持つ単純なペアクラスで、マップのエントリによく似ています。私はいくつかのオプションに

を試してみました

 List<KeyPair<String, String>> keyList = User.getContactDetails() 
     .entrySet() 
     .stream() 
     .map(e -> new KeyPair<String, String>(e)) 
     .collect(Collectors.toList()); 

     performQueryWithHeaders(get("https://stackoverflow.com/users/1")) 
      .andExpect(status().isOk()) 
      .andExpect(jsonPath("$.contactDetails" , 
        is(keyList))); 

される(キーリスト)

は(keyList.toString())である

は(Gson.toJson(キーリスト)

されています(mapper.writeValueAsString(keyList)(jackson serialization)

ただし、

JSON path "$.contactDetails" 
Expected: is "[{\"key\":\"example title\",\"value\":\"example title\"}, {\"key\":\"another example\",\"value\":\"another example\"},{\"key\":\"etc \",\"value\":\"etc \"}]" 
    but: was <[{"key":"example title","value":"example title"},{"key":"another example","value":"another example"},{"key":"etc ","value":"etc "}]> 

JSON path "$.contactDetails" 
Expected: is <[KeyPair(key=example title, value=example title), KeyPair(key=another example, value=another example), KeyPair(key=etc , value=etc)]> 
but: was <[{"key":"example title","value":"example title"},{"key":"another example","value":"another example"},{"key":"etc ","value":"etc "}]> 

JSON path "$.contactDetails" 
Expected: is "[KeyPair(key=example title, value=example title), KeyPair(key=another example, value=another example), KeyPair(key=etc , value=etc)]" 
but: was <[{"key":"example title","value":"example title"},{"key":"another example","value":"another example"},{"key":"etc ","value":"etc "}]> 

JSON path "$.contactDetails" 
Expected: is "[{\"key\":\"example title\",\"value\":\"example title\"},{\"key\":\"another example\",\"value\":\"another example\"},{\"key\":\"etc \",\"value\":\"etc \"}]" 
but: was <[{"key":"example title","value":"example title"},{"key":"another example","value":"another example"},{"key":"etc ","value":"etc "}]> 

私はテストでjsonを少しゴミ/壊れやすいように書いたくありません。それで誰もそれをマップする方法を知っていますか?

答えて

0

問題は、JsonPathが$.contactDetailsを解析し、それをList <>と比較することです。 keyListを文字列に変換して比較することができます。

一覧表示する$.contactDetailsを解析する場合、私はGsonライブラリをアドバイスすることができます

import java.lang.reflect.Type; 
import com.google.gson.reflect.TypeToken; 
// ... 
Type listType = new TypeToken<List<KeyPair<String, String>>>() {}.getType(); 
List<KeyPair<String, String>> yourList = new Gson().fromJson(JsonPath.parse("$.contactDetails")), listType); 
+0

私は完全にはどのように必要な文字列に変更するか分からない。 私は.toStringを試してから、gson.toJsonとjacksonオブジェクトマッパーの両方を使用してjsonにシリアライズしましたが、まだ正しくマッピングされていません。 – user1628284

+0

@ user1628284更新 –

0

問題が jsonPath("$.contactDetails")リターン構造中のJsonObjectの種類を以下のように思わ

performQueryWithHeaders(get("https://stackoverflow.com/users/1")) 
      .andExpect(status().isOk()) 
      .andExpect(gson.toJson(jsonPath("$.contactDetails") , 
        is(gson.toJson(keyList))); 

これを試してみてくださいgson.toJson(keyList)は、エスケープして引用符で囲まれたJsonを含むStringを返します。

関連する問題