我刚开始使用Mockito,所以不太熟悉它。我嘲笑过这样一个对象:
CInjectorFactory mockFactory = mock(CInjectorFactory.class);
现在,如果我没有存根特定的函数,它不会调用原始的CInjectorFactory函数,并且我得到一个'null'值:
public CMainActivityHelper getMainActivityHelper()
这是否意味着,只有存根函数可用于模拟对象?这个模拟对象不会从被模拟的对象继承原始函数吗?
感谢。
答案 0 :(得分:5)
您可以使用:
CInjectorFactory mockFactory = mock(CInjectorFactory.class, Mockito.CALLS_REAL_METHODS);
然后,unstubbed方法将委托给真正的实现。
Mockito.CALLS_REAL_METHODS
javadoc的示例:
Foo mock = mock(Foo.class, CALLS_REAL_METHODS);
// this calls the real implementation of Foo.getSomething()
value = mock.getSomething();
when(mock.getSomething()).thenReturn(fakeValue);
// now fakeValue is returned
value = mock.getSomething();
答案 1 :(得分:3)
是的,那是documented behavior:
默认情况下,对于返回值的所有方法,mock返回null,空集合或适当的原始/原始包装值(例如:0,false,...表示int / Integer,boolean / Boolean,...) 。
如果你想在没有存根的情况下调用真正的方法,你应该spy the real object:
您可以创建真实对象的间谍。当你使用spy时,会调用真正的方法(除非方法被存根)。
答案 2 :(得分:2)
mockito website的首页清楚地显示了如何存根方法调用:
CMainActivityHelper expected = ...;
when(mockFactory.getMainActivityHelper()).thenReturn( expected );
然后,当您致电mockFactory.getMainActivityHelper()
时,它将返回expected
。