簡體   English   中英

如何存根使用@InjectMocks注釋的類的方法?

[英]How to stub a method of an class annotated with @InjectMocks?

MyDictionary.get方法下面通過調用map.get使用注入的map

只是出於好奇,我MyDictionary.getMyDictionary.get方法,就像我經常使用MyDictionary.get和間諜一樣,所以我覆蓋了注入。

但這僅在MyDictionary.get確實調用map.getmap.get 如果map.get返回一些字符串(此處為空字符串),則存根Mockito.when不起作用。 行為就好像它不存在一樣。 在斷言行中, dictionary.get("key")等於空字符串。 這是我不明白的。

@RunWith(MockitoJUnitRunner.class)
public class MockitoTest {

    @Mock
    Map<String, String>map;

    @InjectMocks
    MyDictionary dictionary;

    @Test
    public void testMyDictionary(){
        Mockito.when(dictionary.get("key")).thenReturn("value");
        Assert.assertEquals("value", dictionary.get("key"));
    }

    private static class MyDictionary{
        private Map<String, String> map; 
        public String get(String key){
            return map.get(key);
// or,
            return "";
        }
    }
}

我很驚訝你沒有得到一個MissingMethodInvocationException ,當你試圖存根一個不是@Mock或@Spy的對象的方法時會拋出這個異常。

dictionary實例只是一個類的常規實例,這里沒有Mockito代理(因為只使用了@InjectMocks注釋)。

另一個驚喜是,當觸發map.get時,您不會獲得null ,因為String返回方法的默認返回值為null

無論如何..

如果你想要存儲`dictionary'實例的方法,你必須按如下方式配置你的測試類:

@InjectMocks
@Spy
MyDictionary dictionary;

@Test
public void testMyDictionary(){
    doReturn("value").when(dictionary).get("key);
    Assert.assertEquals("value", dictionary.get("key"));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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