如何在Python Mockito中正确使用verifyNoUnwantedInteractions()?

2022-09-28 20:24:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试在Python版本的Mockito中使用verifyNoUnwantedInteractions(),但是要么我对它应该做什么有错误的理解,要么它实际上不起作用。我认为会发生的事情是,它将检查是否存在与存根方法的未expect的交互。但是,发生了以下情况:

这就过去了。我希望destroy()调用会引发异常,因为它没有被expected

expect(maker, times=1).create().thenReturn(thing)
when(maker).destroy().thenReturn(thing)
maker.start() # Calls both create() and destroy()
verifyNoUnwantedInteractions(maker)

这不会通过,因为destroy()被调用了零次以上。verifyNoUnwantedInteractions()不是必需的,因为它无论如何都会失败。你知道吗

expect(maker, times=1).create().thenReturn(thing)
expect(maker, times=0).destroy().thenReturn(thing)
when(maker).destroy().thenReturn(thing)
maker.start() # Calls both create() and destroy()
verifyNoUnwantedInteractions(maker)

到目前为止,在我看来verifyNoUnwantedInteractions()是非常无用的,使用它的理由是什么,如何正确地使用它?你知道吗


Tags: and版本createstartexpectwhenthingtimesmakerbothcallsmockitodestroythenreturnverifynounwantedinteractions
1条回答
网友
1楼 ·

verifyNoUnwantedInteractions只检查expected存根。通过when创建的存根将被忽略。你知道吗

现在我想这可以归结为whenexpect之间的区别。如果你这样做了

when(maker).destroy()

您可以随时调用它,包括零次。在运行被测单元之后,您可以但肯定不必verify调用它多少次。这将与测试函数中抛出的任何其他断言一样,即当您验证时。你知道吗

将其与expect进行比较,在expect中预先设置了呼叫时间期望。你知道吗

expect(maker, times=1).destroy()

现在,您的被测代码可以准确地调用该方法一次,否则它将抛出被测代码。你知道吗

对于我们在示例中讨论的内容,verifyNoUnwantedInteractions将只检查maker.destroy()是否被调用。你知道吗

热门问题