Я работаю с:
- Весенний MVC-тест
- Хэмкрест
- JsonPath
У меня есть следующий ответ от сервера:
MockHttpServletResponse:
Status = 200
Error message = null
Headers = {Content-Type=[application/json;charset=UTF-8]}
Content type = application/json;charset=UTF-8
Body = {
"id" : "100",
"nombre" : "Jesús Você",
"apellido" : "Mão Nuñez",
"fecha" : "1977-12-08"
}
Forwarded URL = null
Redirected URL = null
Следующее работает, как и ожидалось (действительно):
.andExpect(jsonPath("$").exists())
.andExpect(jsonPath("$", notNullValue()))
.andExpect(jsonPath("$", isA(LinkedHashMap.class)))
.andExpect(jsonPath("$.*").exists())
.andExpect(jsonPath("$.*", notNullValue()))
.andExpect(jsonPath("$.*", isA(JSONArray.class)))
.andExpect(jsonPath("$.*", hasSize(is(4))))
Мне нужно проверить, что ("$")
равно 1. Подтвердите существование 1 элемента. Это еще раз подтвердить следующее:
Body = {
"id" : "100",
"nombre" : "Jesús Você",
"apellido" : "Mão Nuñez",
"fecha" : "1977-12-08"
}
Я пробовал:
.andExpect(jsonPath("$", hasSize(is(1))))
Обратите внимание на разницу между $
и $.*
, для последнего я знаю, что он подсчитывает количество полей. Но от первого я всегда получаю:
java.lang.AssertionError: JSON path "$"
Expected: a collection with size is <1>
but: was <{id=100, nombre=Jesús Você, apellido=Mão Nuñez, fecha=1977-12-08}>
at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:18
«Кажется», данные не являются коллекцией, но помните, что .andExpect(jsonPath("$", isA(LinkedHashMap.class)))
проходит. Я как-то запутался.
Следовательно, можно проверить, что ("$")
равно 1.? Если да, то как?
Я прочитал подсчет участников с помощью jsonpath?
И говорит:
Чтобы проверить размер массива: jsonPath("$", hasSize(4))
Для подсчета членов объекта: jsonPath("$.*", hasSize(4))
Мои возвращаемые данные не являются массивом, это LinkedHashMap.class
, потому что, если я использую .andExpect(jsonPath("$").isArray())
, я получаю:
java.lang.AssertionError: Expected an array at JSON path "$" but found: {id=100, nombre=Jesús Você, apellido=Mão Nuñez, fecha=1977-12-08}
Expected: an instance of java.util.List
but: <{id=100, nombre=Jesús Você, apellido=Mão Nuñez, fecha=1977-12-08}> is a java.util.LinkedHashMap
Кстати: .andExpect(jsonPath("$.*").isArray())
проход.
1
? - person Lyubomyr Shaydariv   schedule 05.10.2016Body = { "id" : "100", "nombre" : "Jesús Você", "apellido" : "Mão Nuñez", "fecha" : "1977-12-08" }
— это всего лишь один элемент с четырьмя полями. Поэтому$.*
представляет элемент с четырьмя полями. Но мне нужно проверить предмет (я думал, что$
должно быть достаточно, но не получается). - person Manuel Jordan   schedule 05.10.2016jsonPath("$").exists()
тогда? - person Lyubomyr Shaydariv   schedule 05.10.2016jsonPath("$").exists()
тоже должен пройти, но неважно, было ли это 1 или 2 элемента. - person Manuel Jordan   schedule 05.10.2016To test size of array: jsonPath("$", hasSize(4))
проход, когда это массив с большим количеством элементов, в данном случае 4. - person Manuel Jordan   schedule 05.10.2016hasSize()
, который, кажется, принимает как корневые массивы, так и выражение элементов корневого массива. Вы можете написать свой сопоставитель, чтобы заменитьhasSize()
. Извините, я все еще слеп, чтобы увидеть обоснование вашего запроса. :) - person Lyubomyr Shaydariv   schedule 05.10.2016accept both root arrays or root array
для последнего илиroot array
дляhasSize()
не работает. - person Manuel Jordan   schedule 05.10.2016