Attualmente sto scrivendo alcuni test unitari per un progetto Spring MVC. Poiché il tipo di supporto restituito è JSON, provo a utilizzare jsonPath per verificare se vengono restituiti i valori corretti.SpringMVC/mockMVC/jsonpath confronta l'elenco di stringhe
Il problema che si verifica è verificare se un elenco di stringhe contiene i valori corretti (e solo quelli corretti).
Il mio piano era:
- Verificare che la lista ha la giusta lunghezza
- Per ogni elemento che dovrebbe essere restituito, controllare se è nella lista
purtroppo, nessuno di queste cose sembrano funzionare.
Ecco la parte rilevante del mio codice:
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());
Solo i primi due "aspettative" (Isok & IsArray) stanno lavorando. Gli altri (per lunghezza e contenuto) posso girare e girare come voglio, non mi danno alcun risultato utile.
Qualche suggerimento?
Grazie mille! Questo ha aiutato molto! –
Se è stato utile, puoi contrassegnare la mia risposta come accettata :) – chaldaean
@chaldaean Quale libreria hamcrest stai usando? In quello che ho, hamcrest-all-1.1, la classe org.hamcrest.Matchers non contiene i metodi hasSize e contieneInAnyOrder. –