RxJava单元测试的Observable.Interval,“上下文已更改”错误

时间:2019-05-15 21:34:48

标签: unit-testing kotlin mockito junit4 rx-java2

我正在尝试为以下代码块编写单元测试:

Observable.interval(INITIAL_DELAY, REFRESH_PERIOD, TimeUnit.SECONDS)
            .flatMap {thisMethodReturnsAnObservable()}
            .subscribeOn(Schedulers.io()) 
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(this::onDataLoaded, this::onError)
            .disposeLater()) 

我有一个测试规则,该规则会用有效的testSchedulers覆盖RxSchedulers。

重要:这些测试可以一个一个地运行,但不能一起运行,而且覆盖范围错误,并且错误也相同。

我得到的错误是,调试器点击onDataLoaded方法时,测试的运行立即停止,并显示以下消息:  "

2 个答案:

答案 0 :(得分:0)

默认情况下,Observable.interval在计算调度程序上运行。因此,您将需要使用带调度程序的Observable.interval的重载,或将Schedulers.computation添加到测试规则中。

Observable.interval(INITIAL_DELAY, REFRESH_PERIOD, TimeUnit.SECONDS, [Your scheduler here])

Observable.interval documentation

答案 1 :(得分:0)

在我的测试规则中添加ComputationSchedulerHandler可以解决我的问题。