I newbiew about rxjava and play RxJava in Unitest, but the Observable not running.
@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()}")
}
but subscriber.hasSubscription() return false. how can i get the onNext value, or its because my Observable wrong?
Thanks
RxJava v2 has very useful method test
. It provides functionality for testing your observables in easy way. Rewrite your test by this way and use many of assertion methods, that provide RxJava:
Your edited code
@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)
}
If you want to learn about it more checkout this link