Obecnie piszę niektóre testy jednostkowe dla projektu Spring MVC. Ponieważ zwróconym typem nośnika jest JSON, próbuję użyć jsonPath, aby sprawdzić, czy zwrócono prawidłowe wartości.SpringMVC/mockMVC/jsonpath porównaj listę ciągów znaków
Problem polega na sprawdzeniu, czy lista ciągów znaków zawiera prawidłowe (i tylko prawidłowe) wartości.
mój plan:
- Sprawdź, czy lista ma prawidłową długość
- dla każdego elementu, który ma być zwrócony, sprawdź, czy jest na liście
niestety, żaden z te rzeczy wydają się działać.
Tutaj jest odpowiednia część mojego kodu:
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());
Tylko pierwsze dwa "oczekiwania" (Isok & isArray) pracują. Pozostałe (dotyczące długości i treści) mogę skręcać i obracać, ale chcę, nie dają mi żadnego pożytecznego wyniku.
Wszelkie sugestie?
Dziękuję bardzo! To bardzo pomogło! –
Jeśli to pomogło, możesz oznaczyć moją odpowiedź jako zaakceptowaną :) – chaldaean
@chaldaean Jakiej biblioteki hamowej używasz? W tym, który mam, hamcrest-all-1.1, klasa org.hamcrest.Matchers nie zawiera metod hasSize i containsInAnyOrder. –