Тестирование бесконечного интервала RxJava

У меня есть простой вид, который отображает валюту в виде списка. Приложение выбирает валюты через веб-службу каждые 1 секунду. Поэтому у меня есть следующий метод в моей модели ViewModel:

fun onViewAppeared() { currenciesViewStateUpdates.onNext(CurrenciesViewState(true, null)) Flowable.interval(1, TimeUnit.SECONDS) .flatMapSingle { _ -> currenciesService.calculateCurrencies(Currency("EUR", 10.0)) } .doOnError { error -> Log.d("LOG", error.message) } .observeOn(AndroidSchedulers.mainThread()) .subscribe { currencies -> currenciesViewStateUpdates.onNext(CurrenciesViewState(false, currencies)) } } 

Теперь мне нужно выполнить тестирование этого поведения:

 @Test fun viewAppearedAndCurrenciesRequestSucceeded_currenciesDisplayed() { val currencies = listOf(Currency("", 0.0)) Mockito.`when`(currenciesServiceMock.calculateCurrencies(anyCurrency())).thenReturn(Single.just(currencies)) viewModel.getViewStateUpdates().subscribe(testObserver) viewModel.onViewAppeared() testObserver.assertSubscribed() testObserver.assertNoErrors() testObserver.assertValueCount(2) assertFalse(testObserver.values()[1].loading) assertNotNull(testObserver.values()[1].currencies) testObserver.values()[1].currencies?.let { assertTrue(it.isNotEmpty()) } } 

Все RxSchedulers настроены для немедленного. Проблема: с тестом ждет навсегда, когда наблюдаемая завершает подписку, но она никогда не закончится, потому что это бесконечный интервал. Как я могу проверить его?

У вас будут проблемы с выполнением ваших тестов в том виде, в котором вы создали.

  1. Сделайте свои планировщики в параметры класса, чтобы их можно было вводить надлежащим образом, как во время тестирования, так и в процессе производства.
  2. Используйте планировщики тестов вместо Schedulers.immediate() потому что вы можете оказаться в тупике.
  3. Всегда выполняйте операции с таймером ( interval() , timeout() и т. Д.) Работают с явными планировщиками, обычно с теми, которые вы ввели.
Intereting Posts
Не удается открыть проект студии Android после установки kotlin Spring & kotlin: В чем разница между инсталляцией конструктора и латинита? Являются ли неправильные типы Котлина для примитивов на JVM? Плагин Jacoco Jenkins с Kotlin android – исключение Handle для обновления интерфейса Можете ли вы отобразить / свести строку в Int? Схема проектирования моста, приводящая к слишком большому количеству генериков Подстановочные знаки в Котлине для переменных Напиши Скопируемый интерфейс более элегантный, чем в Java Преобразование может быть в одиночку из другого источника, если возможно завершено Привязка данных Android к Kotlin, BaseObservable и пользовательский делегат Поддерживает ли Kotlin деревья выражений? Гуава конфликтует при использовании kotlin-script-util (для поддержки JSR-223) в приложении, использующем gRPC Невозможно получить доступ к переменной из внутреннего класса: Kotlin android Создать класс расширить AsyncTask без утечки контекстного объекта в Android Kotlin