#android #unit-testing #kotlin
#Android #модульное тестирование #kotlin
Вопрос:
Я учусь использовать модульное тестирование. У меня есть вызов Retrofit, который я хочу проверить, возвращает ли он непустой список, или я также могу сравнить сгенерированный URL-адрес с моим URL-адресом для тестирования. Это не имеет значения. Но он не работает, когда я его запускаю, он никогда не переходит к функции «handleResponse». В моей деятельности это работает нормально.
@RunWith(AndroidJUnit4::class)
class ApiTest {
@Test
fun apiConnection() {
val compositeDisposable = CompositeDisposable()
compositeDisposable.add(
ApiClient.getClient.getQuestions(Params.getParamsSearch())
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(this::handleResponse)
)
}
private fun handleResponse(objectsQueryResult: ObjectsQueryResult) {
assertTrue(objectsQueryResult.items.isEmpty());
assertEquals(objectsQueryResult.items, "");
}
}
Ответ №1:
Для этого можно использовать функцию blockingSubscribe(), например:
Observable.fromCallable {
"Some data"
}
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.blockingSubscribe(this::handleResponse)
Комментарии:
1. В качестве примечания, если вы используете RxJava2, вместо этого удобно использовать метод test(), поскольку он имеет встроенную функцию assert *(). Для примера смотрите: medium.com/@vanniktech /…