É possível contar o número de membros usando JsonPath?
Usando o teste Spring mvc, estou testando um controlador que gera
{"foo": "oof", "bar": "rab"}
com
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"));
Eu gostaria de ter certeza de que nenhum outro membro está presente no json gerado. Esperançosamente contando-os usando jsonPath. É possível? Soluções alternativas também são bem-vindas.
hamcrest-all
como uma dependência, mas usehamcrest-library
: code.google.com/p/hamcrest/wiki/HamcrestDistributablesVocê também pode usar os métodos dentro do jsonpath, então, em vez de
você pode fazer
fonte
Podemos usar funções JsonPath como
size()
oulength()
assim:Ou simplesmente analise
net.minidev.json.JSONObject
e obtenha o tamanho:Na verdade, a segunda abordagem parece ter um desempenho melhor do que a primeira. Fiz um teste de desempenho JMH e obtive os seguintes resultados:
O código de exemplo pode ser encontrado aqui .
fonte
Tenho lidado com isso sozinho hoje. Não parece que isso esteja implementado nas asserções disponíveis. No entanto, existe um método para passar um
org.hamcrest.Matcher
objeto. Com isso, você pode fazer algo como o seguinte:fonte
se você não tiver
com.jayway.jsonassert.JsonAssert
em seu classpath (que foi o meu caso), testar da seguinte maneira pode ser uma possível solução alternativa:[nota: presumi que o conteúdo do json é sempre uma matriz]
fonte