Mockito - thenCallRealMethod() on void 函数
Mockito - thenCallRealMethod() on void function
我在尝试编写 JUnit 测试用例时 运行 遇到了问题,我对 Mockito 还比较陌生。
我有一个我正在模拟的class函数,这个函数恰好是一个void return类型。从我的模拟 class 调用此函数时,我的理解(和调试经验)它不会调用原始函数。为了克服这个问题,我尝试将“when”与“thenCallRealMethod()”结合使用。
when(instance.voidFunction()).thenCallRealMethod();
“voidFunction”充满了我不想触发的逻辑。我已将这些提取到 when 语句中以避免这种情况。我读过我应该使用 doReturn().when().voidFunction()
的格式,但是这样做并没有调用真正的方法。
据我所知,我不能在这里使用 Spy,因为我不想在“when”语句之前调用 voidFunction()
。感谢任何帮助,如果这是一个非常简单的解决方案,我深表歉意,因为尽管阅读了很多书,但我对 mockito 的理解并不是很好。谢谢!
when
语法不适用于 void 方法(它不适合 when
),并且 doReturn
在没有 [= 时不适用24=] 值。 doCallRealMethod
可能是您想要的答案。
doCallRealMethod().when(instance).voidFunction();
请记住,在模拟上调用真实方法时,您可能不会获得非常真实的行为,因为与间谍不同,模拟对象将跳过所有构造函数和初始化程序调用,包括设置字段的调用。这意味着如果您的方法完全使用任何实例状态,则它不太可能作为 doCallRealMethod
或 thenCallRealMethod
的模拟工作。使用间谍,您可以创建 class 的真实实例,然后 Mockito.spy
方法将复制该实例状态以实现更真实的交互。
我在尝试编写 JUnit 测试用例时 运行 遇到了问题,我对 Mockito 还比较陌生。
我有一个我正在模拟的class函数,这个函数恰好是一个void return类型。从我的模拟 class 调用此函数时,我的理解(和调试经验)它不会调用原始函数。为了克服这个问题,我尝试将“when”与“thenCallRealMethod()”结合使用。
when(instance.voidFunction()).thenCallRealMethod();
“voidFunction”充满了我不想触发的逻辑。我已将这些提取到 when 语句中以避免这种情况。我读过我应该使用 doReturn().when().voidFunction()
的格式,但是这样做并没有调用真正的方法。
据我所知,我不能在这里使用 Spy,因为我不想在“when”语句之前调用 voidFunction()
。感谢任何帮助,如果这是一个非常简单的解决方案,我深表歉意,因为尽管阅读了很多书,但我对 mockito 的理解并不是很好。谢谢!
when
语法不适用于 void 方法(它不适合 when
),并且 doReturn
在没有 [= 时不适用24=] 值。 doCallRealMethod
可能是您想要的答案。
doCallRealMethod().when(instance).voidFunction();
请记住,在模拟上调用真实方法时,您可能不会获得非常真实的行为,因为与间谍不同,模拟对象将跳过所有构造函数和初始化程序调用,包括设置字段的调用。这意味着如果您的方法完全使用任何实例状态,则它不太可能作为 doCallRealMethod
或 thenCallRealMethod
的模拟工作。使用间谍,您可以创建 class 的真实实例,然后 Mockito.spy
方法将复制该实例状态以实现更真实的交互。