Я думаю, что вам нужно, чтобы вызов, возвращаемый ApiService
, вызывал правильный метод, как только он был поставлен в очередь.
Для этого вы можете использовать thenAnswer
- в Mockito. Вот пример. В вашем случае вы можете попробовать это:
Mockito.`when`(call.enqueue(Mockito.any())).thenAnswer {
(it.getArgument(0) as Callback<MatchSearchResponseModel>).onResponse(
call,
Response.success(MatchSearchResponseModel(/*whatever is needed to build this object*/))
)
}
Здесь вы убедитесь, что после вызова call.enqueue
с любым аргументом он немедленно вызовет метод onResponse
с успешным ответом. Вы можете сделать что-то подобное для ошибки, а также позвонить по номеру onFailure
.
Последнее, что вам нужно сделать, это убедиться, что ваша служба API возвращает настроенный макет call
:
Mockito.`when`(apiService.loadSearchMatch(kata)).thenReturn(call)
Я бы поставил это на тест. Поэтому, прежде чем вызывать метод презентатора, я настроил макеты следующим образом.
Теперь, вызов teamPresenter.searchMatch()
, должен вызвать apiService.loadSearchMatch(cari)
, который вернет ложный вызов, который после постановки в очередь вызовет переданный обратный вызов. onResponse
method.
Наконец, как вы могли заметить, when
на самом деле написано с обратными метками. Это потому, что это ключевое слово kotlin, которое необходимо экранировать. Не только по этой причине, но и по многим другим, вы можете рассмотреть возможность использования Mockito Kotlin, который является превосходным kotlin библиотечным обертыванием mockito и значительно облегчает жизнь.