Android Mockito TooManyActualInvocations - PullRequest
       6

Android Mockito TooManyActualInvocations

0 голосов
/ 29 ноября 2018

Я пишу тестовый код с использованием 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' на другое значение, которое не дублируется, оно работает нормально.

Как это исправить?

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

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, если вы хотите оставить место для специфики реализации.

0 голосов
/ 29 ноября 2018

Я нашел разрешение.

Я не знал об интерфейсе "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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...