Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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!!

like image 612
Vinod Avatar asked May 24 '26 00:05

Vinod


1 Answers

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?

like image 133
Haim Raman Avatar answered May 26 '26 18:05

Haim Raman



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!