[英]how to mock a private method under a injectmocks annotated class in java
[英]How to stub a method of an class annotated with @InjectMocks?
MyDictionary.get
方法下面通過調用map.get
使用注入的map
。
只是出於好奇,我MyDictionary.get
了MyDictionary.get
方法,就像我經常使用MyDictionary.get
和間諜一樣,所以我覆蓋了注入。
但這僅在MyDictionary.get
確實調用map.get
時map.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.