Vinod
Vinod

Reputation: 2311

JsonPath OR condition using MockMVC

I am practicing MockMVC for rest call unit testing. how can we test the Boolean values so that whether the result is true or false I need to pass the test, I tried as follows,

mockMvc.perform(get("/student/{Id}", 1L)).
.andExpect(status().isOk())
.andExpect(jsonPath("$.isPass", is(true  || false)));

Also I have list with 6 values, how can use list contains all kind of method,

.andExpect(jsonPath("$.subjectList", hasSize(5)))
.andExpect(jsonPath("$.subjectList.name", Matchers.contains("English", "Hindi", "France", "Tamil", "Bengali"))

Any suggestions please!!

Upvotes: 9

Views: 5637

Answers (1)

Haim Raman
Haim Raman

Reputation: 12023

I would suggest the use of hamcrest AnyOf logical matcher

Form the Tutorial :

anyOf - matches if any matchers match, short circuits (like Java ||)

So in your case:

import static org.hamcrest.core.AnyOf.*;

mockMvc.perform(get("/student/{Id}", 1L)).
.andExpect(status().isOk())
.andExpect(jsonPath("$.isPass", anyOf(is(false),is(true))));
.andExpect(jsonPath("$.subjectList.name", anyOf(is("English"),is("Hindi")…)));

Somtime the usage of hamcrest with Junit and some mock libs can be tricky see

How to use JUnit and Hamcrest together?

Upvotes: 8

Related Questions