Модульный тест для модернизации

#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 /…