Mockito выдает InvalidUseOfMatchersException для «verify ()» - PullRequest
0 голосов
/ 12 марта 2020

Я хотел проверить вызовы API в моем приложении. поскольку вызовы API являются асинхронными. Я использую mockito (verify вместе с ArgumentCaptor).

@Captor
lateinit var callbackCaptor: ArgumentCaptor<Callback<ResponseModel>>

 @Test
 fun testDetailsApiCall() {
    val mock: MyRepository = mock()
    verify(mock.getSomeDetails("xxx", "xxx", capture(callbackCaptor)))
 }

getSomeDetails внутри MyRepository вызывает вызов API сервера и отправляет ответ обратно через interface callback.

Но когда я выполняю этот тестовый пример, я получаю следующую ошибку

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: 
Invalid use of argument matchers!
3 matchers expected, 1 recorded:
-> at xxx.xxxx.testDetailsApiCall

This exception may occur if matchers are combined with raw values:
    //incorrect:
    someMethod(anyObject(), "raw String");
When using matchers, all arguments have to be provided by matchers.
For example:
    //correct:
    someMethod(anyObject(), eq("String by matcher"));

For more info see javadoc for Matchers class.

Если вы, ребята, сможете выяснить проблему в этом, было бы очень полезно

1 Ответ

1 голос
/ 12 марта 2020

Если вы проверяете какой-либо метод с вызовом аргументов, вы используете средства сопоставления (например, any(), eq(), et c.) Для всех его параметров или вместо них используете точные значения. Вы не можете смешивать оба. Так что вместо "xxx" используйте eq("xxx").

А также, я думаю, вы используете метод verify() не так, как его следует использовать. Его семантика должна быть следующей: verify(mock).method().

Попробуйте изменить метод проверки на:

verify(mock).getSomeDetails(eq("xxx"), eq("xxx"), capture(callbackCaptor))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...