Можно ли подсчитать количество членов с помощью JsonPath?
Используя тест spring mvc, я тестирую контроллер, который генерирует
{"foo": "oof", "bar": "rab"}
с участием
standaloneSetup(new FooController(fooService)).build()
.perform(get("/something").accept(MediaType.APPLICATION_JSON)).andExpect(status().isOk())
.andExpect(jsonPath("$.foo").value("oof"))
.andExpect(jsonPath("$.bar").value("rab"));
Я хотел бы убедиться, что в сгенерированном json нет других участников. Надеюсь, подсчитав их с помощью jsonPath. Является ли это возможным? Также приветствуются альтернативные решения.
hamcrest-all
в качестве зависимости, а используйтеhamcrest-library
: code.google.com/p/hamcrest/wiki/HamcrestDistributablesВы также можете использовать методы внутри jsonpath, поэтому вместо
ты можешь сделать
источник
Мы можем использовать функции JsonPath, такие как
size()
илиlength()
, например:Или просто
net.minidev.json.JSONObject
разобрать и получить размер:Действительно, второй подход выглядит более эффективным, чем первый. Я сделал тест производительности JMH и получил следующие результаты:
Пример кода можно найти здесь .
источник
Сам сегодня разбирался с этим. Не похоже, что это реализовано в доступных утверждениях. Однако есть способ передать
org.hamcrest.Matcher
объект. С этим вы можете сделать что-то вроде следующего:источник
если у вас нет
com.jayway.jsonassert.JsonAssert
пути к классам (что было со мной), тестирование следующим образом может быть возможным обходным путем:[примечание: я предполагал, что содержимое json всегда является массивом]
источник