我在尝试编写 JUnit 测试用例时遇到了问题,而且对 Mockito 还比较陌生。
我有一个正在嘲笑的类的函数,该函数恰好是 void 返回类型。当从我的模拟类调用此函数时,我的理解(和调试经验)是它不会调用原始函数。为了克服这个问题,我尝试使用“when”和“thenCallRealMethod()”。
when(instance.voidFunction()).thenCallRealMethod();
“voidFunction”充满了我不想触发的逻辑。我已将它们提取到 when 语句中以避免这种情况。我读过我应该使用以下格式doReturn().when().voidFunction()
,但是这样做并不会调用真正的方法。
据我了解,我不能在这里使用间谍,因为我不希望voidFunction()
在“when”语句之前调用。感谢任何帮助,如果这是一个非常简单的解决方案,我深表歉意,因为尽管我阅读了很多内容,但我对mockito的理解并不是很好。谢谢!
The when
语法不适用于 void 方法(它不适合when
), and doReturn
当没有返回值时不适用。doCallRealMethod http://site.mockito.org/mockito/docs/current/org/mockito/Mockito.html#doCallRealMethod()很可能就是你想要的答案。
doCallRealMethod().when(instance).voidFunction();
请记住,在模拟上调用真实方法时,您可能不会得到非常真实的行为,因为与间谍不同,模拟对象将跳过所有构造函数和初始化程序调用,包括设置字段的调用。这意味着,如果您的方法根本使用任何实例状态,则它不太可能作为模拟使用doCallRealMethod
or thenCallRealMethod
。使用间谍,您可以创建类的真实实例,然后Mockito.spy
方法将复制该实例状态以实现更真实的交互。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)