验证Jackon JsonAnySetter被称为Junit

时间:2018-04-27 08:22:05

标签: java junit java-8 jackson mockito

我有一个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对象,但这也必须被嘲笑,所以不确定在这种情况下我应该如何进行。

1 个答案:

答案 0 :(得分:0)

创建Log对象的模拟对象并将其设置在Book类中。

这假设Log对象是静态的, 这似乎是合理的。