1

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

CInjectorFactory mockFactory = mock(CInjectorFactory.class);

现在,如果我不存根某个特定函数,它就不会调用原始 CInjectorFactory 的函数,我会得到一个“空”值:

public CMainActivityHelper getMainActivityHelper()

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

谢谢。

4

3 回答 3

5

您可以使用 :

CInjectorFactory mockFactory = mock(CInjectorFactory.class, Mockito.CALLS_REAL_METHODS);

然后,未存根的方法将委托给真正的实现。

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();
于 2013-01-04T09:26:05.227 回答
3

是的,这是记录在案的行为

默认情况下,对于所有返回值的方法,mock 返回 null、空集合或适当的原始/原始包装器值(例如:0、false、...对于 int/Integer、boolean/Boolean、...)。

如果您希望在不被存根时调用真正的方法,您应该监视真正的对象

您可以创建真实对象的间谍。当您使用 spy 时,会调用真正的方法(除非方法被存根)。

于 2013-01-04T07:39:39.727 回答
2

mockito网站的首页清楚地显示了如何存根方法调用:

CMainActivityHelper expected = ...;
when(mockFactory.getMainActivityHelper()).thenReturn( expected );

然后当你调用mockFactory.getMainActivityHelper()它会返回expected

于 2013-01-04T07:40:07.597 回答