¿Es posible contar la cantidad de miembros que usan JsonPath?
Usando la prueba spring mvc , estoy probando un controlador que genera
{"foo": "oof", "bar": "rab"}
con
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"));
Me gustaría asegurarme de que no haya otros miembros presentes en el json generado. Con suerte, contándolos usando jsonPath. ¿Es posible? Las soluciones alternativas también son bienvenidas.
hamcrest-all
como una dependencia, sino usehamcrest-library
: code.google.com/p/hamcrest/wiki/HamcrestDistributablesTambién puede usar los métodos dentro de jsonpath, así que en lugar de
tu puedes hacer
fuente
Podemos usar funciones de JsonPath como
size()
olength()
, así:O simplemente analizando
net.minidev.json.JSONObject
y obteniendo el tamaño:De hecho, el segundo enfoque parece funcionar mejor que el primero. Hice una prueba de rendimiento de JMH y obtengo los siguientes resultados:
El código de ejemplo se puede encontrar aquí .
fuente
He estado lidiando con esto yo mismo hoy. No parece que esto esté implementado en las afirmaciones disponibles. Sin embargo, existe un método para pasar un
org.hamcrest.Matcher
objeto. Con eso puedes hacer algo como lo siguiente:fuente
si no lo tiene
com.jayway.jsonassert.JsonAssert
en su classpath (que fue mi caso), probar de la siguiente manera puede ser una posible solución:[nota: asumí que el contenido del json es siempre una matriz]
fuente