Как вызвать исключение JsonProcessingException при создании Json из списка с помощью Mockito? - PullRequest
0 голосов
/ 21 мая 2019

Я пытаюсь выполнить блок-блок catch для преобразования List в формат Json с использованием jackson. Вот мой код:

   public String convert(List<POJO> list) {
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            data = objectMapper.writeValueAsString(list);
        } catch (JsonProcessingException exception) {
            System.out.println("Exception message: {}", exception.getMessage());
        }
        return data;
    }

Я попробовал юнит-тестирование следующим образом:

@Mock
ObjectMapper mockObjectMapper;

@Test(expected = JsonProcessingException.class)
public void doThrowException() throws JsonProcessingException {
    doThrow(JsonProcessingException.class).when(mockObjectMapper).writeValueAsString(any());
    dataTransformer.convert(new ArrayList<>());
    verify(mockObjectMapper.writeValueAsString(any()));
}

Я пытался заставить себя осмотреть этот юнит-тест для полного охвата. Я посмотрел пару статей на SO, но не повезло. Так как я новичок в мире модульного тестирования, у меня такое чувство, что я определенно что-то упускаю здесь.

1 Ответ

1 голос
/ 21 мая 2019

1) Ваша тестовая логика неверна в отношении реализации. В реализации вы ловите исключение, поэтому в тестовом случае исключения вы никогда не получите его, как ожидалось.

2) Как сказано в комментарии, вы не можете смоделировать ObjectMapper, если зависимость не видна из клиентского кода класса. Здесь нет никакого способа высмеять класс. Вы могли бы добавить конструктор или установщик для установки этого, но хорошо ли это имеет смысл?

3) Действительно, вы не должны насмехаться здесь. Ваш тестируемый компонент отображает некоторые элементы списка в строку. Вы не хотите издеваться, но тестируйте логику отображения как в исключительных случаях, так и в номинальных случаях. В противном случае ваш тест не будет иметь большого значения.
Чтобы получить JsonProcessingException, вы могли бы вдохновиться прекрасными ответами на этот пост .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...