Убедитесь, что Jackon JsonAnySetter называется Junit - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть POJO, и я использую Джексона для десериализации его в 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 голосов
/ 27 апреля 2018

Создайте фиктивный объект из объекта Log и установите его в классе Book.

Это предполагает, что объект Log является статическим, что кажется разумным.

...