Android Mockito TooManyActualInvocations

yoo*_*hok 2 junit android mockito kotlin

我正在使用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)
Run Code Online (Sandbox Code Playgroud)

这是我的示例代码:

class MyPresenter(val view: MyView) {

    fun doSomething() {
        view.enableProgressBar(0)
        view.enableProgressBar(1)
        view.enableProgressBar(2)
        view.enableProgressBar(0)
    }

}
Run Code Online (Sandbox Code Playgroud)

这是我的测试代码:

@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)
}
Run Code Online (Sandbox Code Playgroud)

如果我删除此行或将值从“ 0”更改为其他值,则该值不会重复。

我怎样才能解决这个问题?

And*_*nin 5

TooManyActualInvocations 意味着...太多实际调用。

这必须工作正常:

@Test
fun doSomethingTest() {
    myPresenter.doSomething()
    Mockito.verify(mockView, times(2)).enableProgressBar(0)
    Mockito.verify(mockView).enableProgressBar(1)
    Mockito.verify(mockView).enableProgressBar(2)
}
Run Code Online (Sandbox Code Playgroud)

至于enableProgressBar被称为0参数两次,然后断言应该是合适的(应断言,它被称为两次)。或者你可以使用一些方便的方法的Mockito等atLeastOnce()atMost(2)等,而不是简单的times,如果你想留下一些空间,实现细节。