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()))