SpringMVC / mockMVC / jsonpath vergleicht die Liste der Strings
Ich bin derzeit am schreiben von unit tests für eine Spring-MVC-Projekt.
Als die zurückgegebenen Medien-Typ ist JSON, die ich versuche zu verwenden jsonPath um zu überprüfen, ob die richtigen Werte zurückgegeben.
Die Mühe, die ich habe, ist zu überprüfen, ob eine Liste von strings enthält die richtigen (und nur die richtigen) Werte.
Mein Plan war:
- Prüfen, ob die Liste hat die richtige Länge
- Für jedes element, das soll zurückgegeben werden, prüfen Sie, ob es in der Liste
leider, keines dieser Dinge scheinen zu funktionieren.
Hier ist der relevante Teil meines Codes:
Collection<AuthorityRole> correctRoles = magicDataSource.getRoles();
ResultActions actions = this.mockMvc.perform(get("/accounts/current/roles").accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk()) //works
.andExpect(jsonPath("$.data.roles").isArray()) //works
.andExpect(jsonPath("$.data.roles.length").value(correctRoles.size())); //doesn't work
for (AuthorityRole role : correctRoles) //doesn't work
actions.andExpect(jsonPath("$.data.roles[?(@=='%s')]", role.toString()).exists());
Nur die ersten zwei "Erwartungen" (isOk & isArray) arbeiten. Die anderen (für Länge und Inhalt) ich kann es drehen und wenden möchte ich aber, sind Sie nicht geben Sie mir keine nützlichen Ergebnis.
Irgendwelche Vorschläge?
InformationsquelleAutor der Frage Martin Keßler | 2013-03-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
1) Statt
versuchen
oder
2) Statt
versuchen
Beachten Sie, dass Sie müssen hinzufügen, hamcrest-Bibliothek.
InformationsquelleAutor der Antwort chaldaean
Hier ist, was ich am Ende mit:
.andExpect(jsonPath('$.data.roles').value(Matchers.hasSize(size)))
und
.andExpect(jsonPath('$.data.roles').value(Matchers.containsInAnyOrder("role1", "role2", "role3")))
InformationsquelleAutor der Antwort jndietz