我正在使用 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/

10-10 18:10
查看更多