Mockito: «Проверяемое исключение недопустимо для этого метода» при выдаче указанного проверенного исключения - PullRequest
1 голос
/ 03 августа 2020

Есть несколько вопросов по этому поводу в StackOverflow, но я считаю, что этот случай будет другим. Я использую Java 11 и Mockito 2.11.0.

Вот минимальный тестовый пример JUnit 4, демонстрирующий мою проблему:

@Test
public void shouldAllowMocking() throws Exception {
  ObjectMapper objectMapper = mock(ObjectMapper.class);
  when(objectMapper.readValue(anyString(), any(Class.class))).thenThrow(new IOException("the-message"));
}

Я издеваюсь над поведением ObjectMapper Джексона readValue(String content, Class<T> valueType) - документация здесь - и документация показывает, что этот метод может выдавать IOException. Так почему же Mockito сообщает, что я не могу издеваться над созданием такого исключения? не жалуюсь.

Ответы [ 2 ]

2 голосов
/ 03 августа 2020

Поскольку версия 2.10 Джексон удалил IOException, это часть кода:

@SuppressWarnings("unchecked")
public <T> T readValue(String content, JavaType valueType)
    throws JsonProcessingException, JsonMappingException
{
    _assertNotNull("content", content);
    try { // since 2.10 remove "impossible" IOException as per [databind#1675]
        return (T) _readMapAndClose(_jsonFactory.createParser(content), valueType);
    } catch (JsonProcessingException e) {
        throw e;
    } catch (IOException e) { // shouldn't really happen but being declared need to
        throw JsonMappingException.fromUnexpectedIOE(e);
    }
} 

Ссылка, которую вы включили в вопрос, указывает на jakson-databind 2.7, поэтому я предполагаю, что вы проверяете неправильное действие c.

1 голос
/ 03 августа 2020

Оказывается, это потому, что я также непреднамеренно обновил свою версию jackson, а новые версии (2.11.x) больше не выбрасывают IOException.

...