О порядке вызовов
По умолчанию Mockito.verify()
не имеет значения для порядка вызовов.
Чтобы принять это во внимание, оберните макет вInOrder
экземпляра и выполните проверку вызова для этого экземпляра.
Об отсутствии больше взаимодействий
Если имитирование больше не вызывается после методов, которые вы хотите проверить, вы можете использовать Mockito.verifyNoMoreInteractions(Object... mocks)
, который проверяет, если какой-либо изданные mock-ы имеют любые неподтвержденные взаимодействия, такие как:
InOrder inOrder = Mockito.inOrder(mockedA);
inOrder.verify(mockedA).add("1");
inOrder.verify(mockedA).add("2");
Mockito.verifyNoMoreInteractions(mockedA);
Если mock все еще может быть вызван после методов, которые вы хотите проверить, вы можете добавить после того, как ваш проверяет вызов к verify(T mock, VerificationMode mode)
передача VerificationMode
, которая проверяет, что было выполнено не более 2 вызовов.
InOrder inOrder = Mockito.inOrder(mockedA);
inOrder.verify(mockedA).add("1");
inOrder.verify(mockedA).add("2");
Mockito.verify(mockedA, Mockito.atMost(2)).add(Mockito.anyString());
Предупреждение о вашей мысли и способе насмешки
Так как тест выше не может поймать, если кто-то случайно добавляетдругой вызов, такой как add («3») в последнем.
Mockito предоставляет мощный и широкий набор инструментов для работы с имитаторами.Некоторые функции, такие как проверка и, в частности, проверка того, что больше не было обнаружено взаимодействия о макете или конкретном методе макета , делают ваш тест более сложным для чтения и поддержки .
А также, в настоящее времяВы хотите проверить, что вызовы на макете были выполнены в определенном порядке.Но вы, как правило, хотите использовать эти проверки только по мере необходимости, то есть в соответствии с бизнес / логическими сценариями, а не с техническими вызовами.
Например, предположим, что в тестируемом методе у вас есть случай, когда по бизнес-причинам вызывается фиктивный метод 3раз и другой случай, когда смоделированный метод вызывается 2 раза.Возможно, имеет смысл проверить, что он вызывается только 2 раза, а не больше в случае с двумя ожидаемыми вызовами.
Но, в общем, вы должны быть осторожны, чтобы ваш модульный тест не использовал чрезмерно насмешливую проверку, которая может выглядетькак утверждение об описании потока, а не утверждение о поведении / логике.