[英]Mockito: “Checked exception is invalid for this method” when throwing specified checked exception
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"));
}
我是 mocking Jackson 的 ObjectMapper 的readValue(String content, Class<T> valueType)
方法的行為- 此處的文檔-文檔顯示該方法可以拋出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,因此我假設您正在檢查錯誤的文檔。
原來這是因為我無意中更新了我的jackson
版本,並且新版本(2.11.x)不再拋出IOException
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.