Mockito - thenCallRealMethod()on void function

时间:2016-10-05 18:58:50

标签: mockito

您好我在尝试编写JUnit测试用例时遇到了问题而且对Mockito来说相对较新。

我有一个我正在嘲笑的类的函数,这个函数碰巧是一个void返回类型。从我的模拟类中调用此函数时,我的理解(和调试经验)是它不调用原始函数。为了克服这个问题,我尝试使用"当"使用" thenCallRealMethod()"。

    when(instance.voidFunction()).thenCallRealMethod();

" voidFunction"充满逻辑,我不想解雇。为了避免这种情况,我已将这些提取到when语句中。我已经读过我应该使用doReturn().when().voidFunction()的格式,但这样做不会调用真正的方法。

这也是我的理解,我不能在这里使用间谍,因为我不希望在"之前调用的voidFunction()"声明。任何帮助表示赞赏,如果这是一个非常简单的解决方案我很抱歉,因为尽管阅读了很多,但我对mockito的理解还不是很好。谢谢!

1 个答案:

答案 0 :(得分:37)

when语法不适用于void方法(它不适合when),doReturn不适用于没有返回值的情况。 doCallRealMethod可能就是你想要的答案。

doCallRealMethod().when(instance).voidFunction();

请记住,在模拟上调用实际方法时,您可能无法获得非常逼真的行为,因为与间谍不同,模拟对象将跳过所有构造函数和初始化程序调用,包括设置字段的调用。这意味着如果您的方法完全使用任何实例状态,则它不太可能用作doCallRealMethodthenCallRealMethod的模拟。使用间谍,您可以创建类的真实实例,然后Mockito.spy方法将复制该实例状态以进行更真实的交互。