使用 MockMVC 的 JsonPath OR 条件

JsonPath OR condition using MockMVC

我正在练习 MockMVC 以进行剩余调用单元测试。我们如何测试布尔值,以便结果是真还是假我需要通过测试,我试过如下,

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

我还有一个包含 6 个值的列表,如何使用列表包含所有类型的方法,

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

有什么建议吗!!

我建议使用 hamcrest AnyOf 逻辑匹配器

表格 Tutorial :

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

所以在你的情况下:

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")…)));

有时将 hamcrest 与 Junit 和一些模拟库一起使用可能会很棘手 见

How to use JUnit and Hamcrest together?