Как вызвать исключение JsonProcessingException для Java модульного теста? - PullRequest
0 голосов
/ 13 февраля 2020

У меня есть метод в классе под названием «HttpResponseHelper», который я пытаюсь выполнить модульным тестом, когда он вызывает исключение JsonProcessingException, но у меня возникли трудности с его получением:

 private static void populateHTTPResponseWithData(ObjectNode httpResponse)
    {
        ObjectMapper mapper = new ObjectMapper();
        responseMapData.keySet().forEach(item -> {
            try
            {
                httpResponse.put(item, mapper.writeValueAsString(responseMapData.get(item)));
            }
            catch (JsonProcessingException e)
            {
                LOGGER.error("Json Processing Exception", e);
            }
        });
    }

Аргумент httpResponse введите ObjectNode (библиотека Джексона), а затем внутри тела метода создается объект сопоставления из класса ObjectMapper.

резонансMapData является ConcurrentHashMap> из класса с именем «MessageProcessResults». Похоже, что здесь он проходит через набор ключей и вставляет строку для пары «Значение ключа» внутри аргумента httpResponse.

Я пытался использовать mockito в mapper, чтобы вернуть искаженный JSON, но похоже, что он пишет значение в виде строки и каждый раз передается.

У кого-нибудь есть предложения или есть простой способ сделать это? Спасибо, что нашли время, чтобы прочитать этот вопрос и, возможно, помочь мне: D

1 Ответ

0 голосов
/ 13 февраля 2020

Когда вы выполняете модульное тестирование, вы не сосредотачиваетесь на том, как базовый код создает исключение, а на том, как ваш код справляется с таким исключением. В связи с этим вы можете смоделировать объект ObjectNode и попросить его вызвать исключение при каждом вызове метода put.

 @Test
public void someTest(){
    Object mockObject = Mockito.mock(ObjectNode.class);
    Mockito.when(mockObject.put()).thenThrow(new JsonProcessingException ("my mock exception"));
    functionUndertest(mockObject); //this is where you inject your mock function. In your case you are expecting a error message to be printed.
}
...