簡體   English   中英

Mockito:拋出指定的已檢查異常時,“已檢查異常對此方法無效”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM