Я пытаюсь протестировать следующий код RxKotlin/RxJava 2:
validate(data)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.flatMap { ... }
Я пытаюсь переопределить планировщики следующим образом:
// Runs before each test suite
RxJavaPlugins.setInitIoSchedulerHandler { Schedulers.trampoline() }
RxAndroidPlugins.setInitMainThreadSchedulerHandler { Schedulers.trampoline() }
Однако при запуске теста я получаю следующую ошибку:
java.lang.ExceptionInInitializerError
...
Caused by: java.lang.NullPointerException: Scheduler Callable result can't be null
at io.reactivex.internal.functions.ObjectHelper.requireNonNull(ObjectHelper.java:39)
at io.reactivex.plugins.RxJavaPlugins.applyRequireNonNull(RxJavaPlugins.java:1317)
at io.reactivex.plugins.RxJavaPlugins.initIoScheduler(RxJavaPlugins.java:306)
at io.reactivex.schedulers.Schedulers.<clinit>(Schedulers.java:84)
Кто-нибудь сталкивался с этой проблемой?
Тест работал нормально при использовании RxKotlin/RxJava 1 и следующих переопределений планировщика:
RxAndroidPlugins.getInstance().registerSchedulersHook(object : RxAndroidSchedulersHook() {
override fun getMainThreadScheduler() = Schedulers.immediate()
})
RxJavaPlugins.getInstance().registerSchedulersHook(object : RxJavaSchedulersHook() {
override fun getIOScheduler() = Schedulers.immediate()
})
setIoSchedulerHandler
, ноflatMap
не вызывался. Наконец-то понял, почему: методvalidate
возвращал наблюдаемую, которая делалаemitter.onNext(null)
:/ Поскольку в RxJava 2 больше не принимаются значения NULL, я изменил это значение наCompletable
, и теперь тесты проходят! - person Alex   schedule 07.04.2017