У меня есть тест MockMVC, который возвращает список объектов. Я пытаюсь проверить правильность установки этого конкретного свойства.
Однако я не могу заставить его соответствовать каким-либо образом, кроме явного добавления. KeyPair — это простой парный класс со значением ключа, очень похожий на запись карты.
List<KeyPair<String, String>> keyList = User.getContactDetails()
.entrySet()
.stream()
.map( e -> new KeyPair<String, String>( e ) )
.collect( Collectors.toList() );
performQueryWithHeaders( get( "/users/1" ) )
.andExpect( status().isOk() )
.andExpect( jsonPath( "$.contactDetails" ,
is( keyList ) ) );
Я пробовал несколько вариантов
есть (список ключей)
(keyList.toString())
есть (Gson.toJson (список ключей)
is(mapper.writeValueAsString(keyList) (сериализация Джексона)
Однако продолжайте получать разные сообщения о несоответствии:
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 в тесте, так как это кажется немного мусорным/хрупким. Так кто-нибудь знает, как это сделать?