test mockmvcresultmatchers examples example andexpect java spring-mvc jsonpath

java - mockmvcresultmatchers - spring test andexpect json



SpringMVC/mockMVC/jsonpath compara la lista de cadenas (2)

1) En lugar de

.andExpect(jsonPath("$.data.roles.length").value(correctRoles.size()));

tratar

.andExpect(jsonPath("$.data.roles.length()").value(correctRoles.size()));

o

.andExpect((jsonPath("$.data.roles", Matchers.hasSize(size))));

2) En lugar de

for (AuthorityRole role : correctRoles) // doesn''t work actions.andExpect(jsonPath("$.data.roles[?(@==''%s'')]", role.toString()).exists());

tratar

actions.andExpect((jsonPath("$.data.roles", Matchers.containsInAnyOrder("role1", "role2", "role3"))));

Ten en cuenta que debes agregar hamcrest-library.

Actualmente estoy escribiendo algunas pruebas unitarias para un proyecto Spring MVC. Como el tipo de medio devuelto es JSON, trato de usar jsonPath para verificar si se devuelven los valores correctos.

El problema que tengo es verificar si una lista de cadenas contiene los valores correctos (y solo los correctos).

Mi plan era:

  1. Compruebe que la lista tiene la longitud correcta
  2. Para cada elemento que debe devolverse, verifique si está en la lista

Lamentablemente, ninguna de estas cosas parece funcionar.

Aquí está la parte relevante de mi código:

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 las dos primeras "expectativas" (isOk & isArray) están funcionando. Los otros (por longitud y contenido) puedo girar y girar como yo quiera, no me están dando ningún resultado útil.

¿Alguna sugerencia?


Esto es lo que terminé usando:

.andExpect(jsonPath(''$.data.roles'').value(Matchers.hasSize(size)))

y

.andExpect(jsonPath(''$.data.roles'').value(Matchers.containsInAnyOrder("role1", "role2", "role3")))