我正在使用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”更改为其他值,则该值不会重复。
我该如何解决?
答案 0 :(得分:3)
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
。
答案 1 :(得分:0)
我找到了解决方法。
我不了解“ InOrder”界面。 下面的代码解决了我的问题。
@Test
fun doSomethingTest() {
myPresenter.doSomething()
val inOrder = Mockito.inOrder(mockView)
inOrder.verify(mockView).enableProgressBar(0)
inOrder.verify(mockView).enableProgressBar(1)
inOrder.verify(mockView).enableProgressBar(2)
inOrder.verify(mockView).enableProgressBar(0)
}