RxJava 在 UniTest Android 中不是 运行(不是 androidTest)

RxJava not running in UniTest Android (Not androidTest)

我是 rxjava 新手,在 Unitest 玩过 RxJava,但 Observable 不是 运行。

@Test
fun notepad(){
    val scheduler = TestScheduler()
    val subscriber = TestObserver<String>()
    RxJavaPlugins.setComputationSchedulerHandler{ scheduler }
    Single.just("Data Local")
        .toObservable()
        .subscribeOn(Schedulers.computation())
        .observeOn(Schedulers.computation())
        .map { "Map Local" }
        .observeOn(Schedulers.computation())
        .flatMap { Observable.just(1) }
        .map { "Map Remote" }
        .startWith { "StartWith" }
        .onErrorReturn { "Error Return" }
        .subscribe(subscriber)
    scheduler.advanceTimeBy(2, TimeUnit.SECONDS)
    print("${subscriber.hasSubscription()}")
}

但 subscriber.hasSubscription() return 错误。我怎样才能获得 onNext 值,或者因为我的 Observable 错误?

谢谢

RxJava v2 有非常有用的方法test。它提供了以简单的方式测试您的可观察对象的功能。用这种方式重写你的测试并使用许多提供 RxJava 的断言方法:

您编辑的代码

@Test
fun notepad(){
    val scheduler = TestScheduler()
    val subscriber = TestObserver<String>()
    RxJavaPlugins.setComputationSchedulerHandler{ scheduler }
    Single.just("Data Local")
        .toObservable()
        .subscribeOn(Schedulers.computation())
        .observeOn(Schedulers.computation())
        .map { "Map Local" }
        .observeOn(Schedulers.computation())
        .flatMap { Observable.just(1) }
        .map { "Map Remote" }
        .startWith { "StartWith" }
        .onErrorReturn { "Error Return" }
        .test()
        .await()
        .assertValueAt(0) { startString->
                yourString == "StartWith"
            }
        .assertValueAt(1) { mapString->
                mapString == "Map Remote"
            }
    scheduler.advanceTimeBy(2, TimeUnit.SECONDS)
}

如果您想了解更多,请结帐this link