gpt4 book ai didi

java - Mockito:抛出指定的已检查异常时为 "Checked exception is invalid for this method"

转载 作者:行者123 更新时间:2023-12-02 19:19:45 26 4
gpt4 key购买 nike

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"));
}

我在 mock Jackson 的 ObjectMapper 的行为 readValue(String content, Class<T> valueType)方法-文档here - 文档显示该方法可以抛出 IOException 。那么为什么 Mockito 报告说我模拟抛出这样的异常是无效的呢?

有趣的是,如果我改变行为来抛出 JsonParseException ,也可以通过该方法抛出,那么 Mockito 不会提示。

最佳答案

自从版本 2.10 Jackson 删除了 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,因此我假设您检查了错误的文档。

关于java - Mockito:抛出指定的已检查异常时为 "Checked exception is invalid for this method",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63226578/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com