REST 控制器测试:MockMvc.andExpect 不适用于 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")))