当前位置: 首页 > 知识库问答 >
问题:

void函数上的Mockito-thenCallRealMethod()

段干河
2023-03-14

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

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

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

“voidFunction”充满了我不想激发的逻辑。为了避免这种情况,我将这些内容提取到when语句中。我读到应该使用doReturn()的格式。当()。voidFunction(),但这样做不会调用实际方法。

我的理解也是,我不能在这里使用间谍,因为我不希望在“时间”语句之前调用voidFunction()。感谢任何帮助,如果这是一个非常简单的解决方案,我深表歉意,因为尽管阅读了很多,但我对mockito的理解并不是很好。谢谢!

共有1个答案

祁晟
2023-03-14

when语法不适用于void方法(它不适用于when中),并且当没有返回值时,doReturn不适用doCallRealMethod可能就是您想要的答案。

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

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

 类似资料:
  • 我用java编写这个简单的类只是为了测试它的一些特性。 0 那么为什么当我在构造函数方法声明中使用时,类的静态字段不再改变了呢?

  • 我正在学习指针是如何工作的,但我不明白这段代码中的一件事。在void*函数中返回int就像一个咒语,但是返回float就不是了。

  • C和C中有没有办法让返回void的函数按照未指定的顺序求值? 我知道函数参数是按未指定的顺序计算的,因此对于不返回void的函数,这可用于以未指定的顺序计算这些函数: 合格编译器编译的合法C和C代码可以按任何顺序打印< code>hi 、< code>bye和< code>moo。这并不是未定义的行为(鼻魔是无效的),有效的输出不止一个,但不一定是无限的,一个兼容的编译器甚至不需要确定它产生了什么

  • 我的代码是关于循环和方法的,这是一个让用户计算面积或使用4个基本数学运算的程序。(三角形、正方形、矩形)及其选择的进程:加法、减法、乘法和除法。 我想我正确地关闭了那里的加法函数,我已经检查了关闭每个函数,它们似乎工作得很好,除了加法函数,因为这是我唯一的错误。

  • 在下面的代码中,为什么允许绑定到函数? 演示 为什么允许这样做的直觉是什么,如何实现它,以及当您向传递一个lvalue参数,然后它调用接受rvalue引用的函数时,它实际上意味着什么?

  • 我正在使用某个抛出异常的库,并希望测试在抛出异常时我的代码行为是否正确。将其中一个重载方法截尾似乎不起作用。我得到了这个错误:Stubber不能应用于void。不存在变量类型T的实例类型,因此void确认为T