模拟- void函数的thenCallRealMethod()



我在尝试编写JUnit测试用例时遇到了一个问题,并且我是Mockito的新手。

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

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

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

这也是我的理解,我不能在这里使用Spy,因为我不希望在"when"之前调用voidFunction()。语句。如果这是一个非常简单的解决方案,我很抱歉,因为我对mockito的理解不是很好,尽管阅读了相当多。谢谢!

when语法不能与void方法一起工作(它不适合when),当没有返回值时,doReturn不适用。doCallRealMethod可能是你想要的答案。

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

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

相关内容

  • 没有找到相关文章

最新更新