Est-il possible de compter le nombre de membres utilisant JsonPath?
En utilisant le test Spring MVC, je teste un contrôleur qui génère
{"foo": "oof", "bar": "rab"}
avec
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"));
Je voudrais m'assurer qu'aucun autre membre n'est présent dans le json généré. Espérons en les comptant en utilisant jsonPath. C'est possible? Des solutions alternatives sont également les bienvenues.
hamcrest-all
tant que dépendance, mais utilisezhamcrest-library
: code.google.com/p/hamcrest/wiki/HamcrestDistributablesVous pouvez également utiliser les méthodes à l'intérieur du jsonpath, donc au lieu de
tu peux faire
la source
Nous pouvons utiliser des fonctions JsonPath comme
size()
oulength()
, comme ceci:Ou simplement analyser
net.minidev.json.JSONObject
et obtenir la taille:En effet, la deuxième approche semble plus performante que la première. J'ai fait un test de performance JMH et j'obtiens les résultats suivants:
L'exemple de code peut être trouvé ici .
la source
J'en ai géré moi-même aujourd'hui. Il ne semble pas que cela soit implémenté dans les assertions disponibles. Cependant, il existe une méthode pour passer un
org.hamcrest.Matcher
objet. Avec cela, vous pouvez faire quelque chose comme ce qui suit:la source
si vous ne l'avez pas
com.jayway.jsonassert.JsonAssert
sur votre chemin de classe (ce qui était le cas avec moi), tester de la manière suivante peut être une solution de contournement possible:[note: j'ai supposé que le contenu du json est toujours un tableau]
la source