Czy można policzyć liczbę członków za pomocą JsonPath?
Używając testu wiosennego MVC testuję kontroler, który generuje
{"foo": "oof", "bar": "rab"}
z
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"));
Chciałbym się upewnić, że w wygenerowanym pliku JSON nie ma innych członków. Mamy nadzieję, że licząc je za pomocą jsonPath. Czy to możliwe? Alternatywne rozwiązania również są mile widziane.
hamcrest-all
jako zależności, ale użyjhamcrest-library
: code.google.com/p/hamcrest/wiki/HamcrestDistributablesMożesz również użyć metod wewnątrz jsonpath, więc zamiast
możesz to zrobić
źródło
Możemy użyć funkcji JsonPath, takich jak
size()
lublength()
, takich jak:Lub po prostu przeanalizuj
net.minidev.json.JSONObject
i pobierz rozmiar:Rzeczywiście, drugie podejście wydaje się działać lepiej niż pierwsze. Wykonałem test wydajności JMH i otrzymałem następujące wyniki:
Przykładowy kod można znaleźć tutaj .
źródło
Sam sobie z tym dzisiaj radziłem. Wydaje się, że nie jest to zaimplementowane w dostępnych asercjach. Istnieje jednak metoda przekazywania
org.hamcrest.Matcher
obiektu. Dzięki temu możesz zrobić coś takiego:źródło
jeśli nie masz
com.jayway.jsonassert.JsonAssert
na swojej ścieżce klas (co miało miejsce w przypadku mnie), testowanie w następujący sposób może być możliwym obejściem:[uwaga: założyłem, że zawartość json jest zawsze tablicą]
źródło