Java 如何对通过@JsonCreator组成的枚举进行单元测试?
我正在使用将JSON字符串反序列化为枚举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
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字符串中提取值
相关实例
的值是什么。尝试添加@JsonProperty:
@JsonCreator
public static RoomType fromJson(@JsonProperty("roomType") final String jsonValue) {
....
}
你的单元测试做了应该做的事情:如果(type.value.equals(jsonValue))
测试现在可以工作,那么它显示你的代码在中是错误的。(奇怪,因为我以前尝试过,但失败了。似乎Android Studio正在缓存某些内容。)谢谢。我没有使用Android Studio,但我怀疑它是否会缓存某些内容。IDE基本上只是文本编辑器。也许这门课不是编译成autmaticaly之类的。。。发生了。。。