我正在使用 Mockito 编写测试代码。
我遇到了 TooManyActualInvocations 错误。
org.mockito.exceptions.verification.TooManyActualInvocations:
mockView.enableProgressBar(0);
Wanted 1 time:
-> at com.MyPresenterTest.doSomething(MyPresenterTest.kt:160)
But was 2 times. Undesired invocation:
-> at com.MyPresenter.doSomething(MyPresenter.kt:195)
这是我的示例代码:
class MyPresenter(val view: MyView) {
fun doSomething() {
view.enableProgressBar(0)
view.enableProgressBar(1)
view.enableProgressBar(2)
view.enableProgressBar(0)
}
}
这是我的测试代码:
@Test
fun doSomethingTest() {
myPresenter.doSomething()
Mockito.verify(mockView).enableProgressBar(0)
Mockito.verify(mockView).enableProgressBar(1)
Mockito.verify(mockView).enableProgressBar(2)
Mockito.verify(mockView).enableProgressBar(0)
}
如果我删除此行或将值从“0”更改为其他不重复的值,则它工作正常。
我怎样才能解决这个问题?
最佳答案
TooManyActualInvocations
意味着......太多的实际调用。
这必须正常工作:
@Test
fun doSomethingTest() {
myPresenter.doSomething()
Mockito.verify(mockView, times(2)).enableProgressBar(0)
Mockito.verify(mockView).enableProgressBar(1)
Mockito.verify(mockView).enableProgressBar(2)
}
由于
enableProgressBar
被调用 两次,参数为 0,那么断言应该是合适的(应该断言它被调用了两次)。或者,如果您想为实现细节留出一些空间,您可以使用一些方便的 Mockito 方法,例如
atLeastOnce()
、 atMost(2)
等,而不是简单的 times
。关于Android Mockito TooManyActualInvocations,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53533284/