Java 如何对通过@JsonCreator组成的枚举进行单元测试?

Java 如何对通过@JsonCreator组成的枚举进行单元测试?,java,json,junit,jackson,Java,Json,Junit,Jackson,我正在使用将JSON字符串反序列化为枚举 public enum RoomType { SHARED("shared"), PRIVATE("private"); private String value; RoomType(String value) { this.value = value; } @JsonCreator public static RoomType fromJson(final String j

我正在使用将JSON字符串反序列化为枚举

public enum RoomType {

    SHARED("shared"),
    PRIVATE("private");

    private String value;

    RoomType(String value) {
        this.value = value;
    }

    @JsonCreator
    public static RoomType fromJson(final String jsonValue) {
        for (RoomType type : values()) {
            if (type.value.equals(jsonValue)) {
                return type;
            }
        }
        return null;
    }

    @JsonValue
    @Override
    public String toString() {
        return value;
    }

}
我想对不同的边缘情况进行单元测试:

@RunWith(JUnit4.class)
public class RoomTypeTest {

    private final ObjectMapper mapper = new ObjectMapper();

    @Test
    public void fromJsonWithShared() throws Exception {
        String json = "{\"roomType\":\"shared\"}";
        RoomType type = mapper.readValue(json, RoomType.class);
        assertThat(type).isEqualTo(RoomType.SHARED);
    }

}
测试失败。当我调试时,当调用
RoomType.fromJson
时,我看到
jsonValue
null
。看起来Jackson没有从JSON字符串中提取值

相关实例

我想Jackson不知道从JSON方法传递给
的值是什么。尝试添加@JsonProperty:

@JsonCreator
public static RoomType fromJson(@JsonProperty("roomType") final String jsonValue) {
     ....
}

你的单元测试做了应该做的事情:如果(type.value.equals(jsonValue))
测试现在可以工作,那么它显示你的代码在
中是错误的。(奇怪,因为我以前尝试过,但失败了。似乎Android Studio正在缓存某些内容。)谢谢。我没有使用Android Studio,但我怀疑它是否会缓存某些内容。IDE基本上只是文本编辑器。也许这门课不是编译成autmaticaly之类的。。。发生了。。。