java - 验证 Jackon JsonAnySetter 被称为 Junit
问题描述
我有一个 POJO,我正在使用 Jackson 将其反序列化为 POJO。我想记录我不知道的键值属性。为此,我以下列方式使用 JsonAnySetter:
@Value
@Slf4j
@Builder
public class Book {
private String titleId;
private String bookName;
private List<String> authors;
@JsonAnySetter
public void ignored(String key, Object value) {
log.warn("Received a key which hasn't been mapped. Key: {}, Value: {}", key, value);
}
}
现在要在我的 Junit 中对此进行测试,如何验证是否调用了忽略的方法?
@Test
public void given_unknown_key_ensure_it_is_logged() {
ObjectMapper objectMapper = new ObjectMapper();
String test = "{\"randomField\": \"test\"}";
Book book = objectMapper.readValue(test, Book.class);
ArgumentCaptor<Book> captor = ArgumentCaptor.forClass(Book.class);
verify(book, times(1)).ignored("randomField", "test");
}
我需要使用实际的 Book 对象,但这也必须被模拟,所以不确定在这种情况下我应该如何进行。
解决方案
创建对象的模拟对象Log
并在Book
类中设置。
这假设 Log 对象是静态的,这似乎是合理的。