问题描述
我有以下简单的 jUnit 测试:
class MyTest {
static class SingleField {
int rank;
SingleField(int rank) {
this.rank = rank;
}
@Override
public boolean equals(Object o) {
if(!(o instanceof SingleField)) {
return false;
} else {
return ((SingleField) o).rank == rank;
}
}
}
@Test
public void testBasicJacksonParsing() throws JsonProcessingException {
assertEquals(new SingleField(3),new ObjectMapper().readValue("{\"rank\" : 3}",SingleField.class));
}
}
不幸的是,在运行时,测试会抛出带有消息的 MismatchedInputException
:
Cannot construct instance of `com.drfirst.gear.user.context.util.AppUtilTest$SingleField` (although at least one Creator exists): cannot deserialize from Object value (no delegate- or property-based Creator)
at [Source: (String)"{"rank" : 3}"; line: 1,column: 2]
接受的答案 here 似乎暗示需要一个全参数构造函数。我显然有一个。我还通过使 SingleField
public
的构造函数尝试了相同的单元测试,并且我还将 rank
更改为 String
,确保我还更新了 {{1 }} 我正在从 String
解析到 "{\"rank\" : 3}"
。抛出相同的 "{\"rank\" : \"3\"}"
。
关于我在这里做错了什么的想法?
解决方法
事实证明,我的字段需要 public
个 setter。