REST 控制器测试:MockMvc.andExpect 不适用于 ENUM
REST Controller test: MockMvc.andExpect doesn't work with ENUM
我正在使用@WebMvcTest 和 MockMvc mockMvc;
我正在尝试做:
mockMvc.perform(get("/api/v2/developers/12"))
.andExpect(jsonPath("$.sportType").value("FOOTBAL"))
但我得到:
java.lang.AssertionError: JSON path "$.sportType"
Expected :FOOTBALL
Actual :FOOTBALL
FOOTBAL - 是枚举值,我也尝试使用“FOOTBAL”代替:
.andExpect(jsonPath("$.sportType").value(SportType.FOOTBALL))
//OR
.andExpect(jsonPath("$.sportType").value(String.valueOf(SportType.FOOTBALL)))
//OR
.andExpect(jsonPath("$.sportType").value(Arrays.asList(SportType.FOOTBALL)))
我的 JSON 看起来如何:
{
"name": "JOHN",
"sportType": "FOOTBALL"
}
由于响应是 JSON 字符串并且 sportType
是字符串类型我建议将其作为字符串而不是枚举进行比较
andExpect(jsonPath("$.sportType").value("FOOTBALL"))
或者你也可以使用Matchers
andExpect(jsonPath("$.sportType", is("FOOTBALL")))
@Deadpool 回答正确。
但是为了与字符串进行比较,我建议使用您的枚举中的 .name() / .toString() 方法。
anExpect(jsonPath("$.sportType"), is(SportType.FOOTBALL.name()))
我正在使用@WebMvcTest 和 MockMvc mockMvc;
我正在尝试做:
mockMvc.perform(get("/api/v2/developers/12"))
.andExpect(jsonPath("$.sportType").value("FOOTBAL"))
但我得到:
java.lang.AssertionError: JSON path "$.sportType"
Expected :FOOTBALL
Actual :FOOTBALL
FOOTBAL - 是枚举值,我也尝试使用“FOOTBAL”代替:
.andExpect(jsonPath("$.sportType").value(SportType.FOOTBALL))
//OR
.andExpect(jsonPath("$.sportType").value(String.valueOf(SportType.FOOTBALL)))
//OR
.andExpect(jsonPath("$.sportType").value(Arrays.asList(SportType.FOOTBALL)))
我的 JSON 看起来如何:
{
"name": "JOHN",
"sportType": "FOOTBALL"
}
由于响应是 JSON 字符串并且 sportType
是字符串类型我建议将其作为字符串而不是枚举进行比较
andExpect(jsonPath("$.sportType").value("FOOTBALL"))
或者你也可以使用Matchers
andExpect(jsonPath("$.sportType", is("FOOTBALL")))
@Deadpool 回答正确。 但是为了与字符串进行比较,我建议使用您的枚举中的 .name() / .toString() 方法。
anExpect(jsonPath("$.sportType"), is(SportType.FOOTBALL.name()))