Mockito非存根函数

时间:2013-01-04 07:32:55

标签: java android mocking mockito

我刚开始使用Mockito,所以不太熟悉它。我嘲笑过这样一个对象:

CInjectorFactory mockFactory = mock(CInjectorFactory.class);

现在,如果我没有存根特定的函数,它不会调用原始的CInjectorFactory函数,并且我得到一个'null'值:

public CMainActivityHelper getMainActivityHelper()

这是否意味着,只有存根函数可用于模拟对象?这个模拟对象不会从被模拟的对象继承原始函数吗?

感谢。

3 个答案:

答案 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