Skip to content

Instantly share code, notes, and snippets.

@uteke
Last active January 27, 2023 10:36
Show Gist options
  • Save uteke/cb924d5854050fdf43ff5278ec910cc0 to your computer and use it in GitHub Desktop.
Save uteke/cb924d5854050fdf43ff5278ec910cc0 to your computer and use it in GitHub Desktop.
RxJava3 scheduler abstraction injected into the ViewModel to cover the test cases
class ExampleViewModelImpl(
private val exampleUseCase: ExampleUseCase,
private val schedulerProvider: SchedulerProvider,
initialState: ExampleState = ExampleState(),
) : HelpFaqViewModel(initialState) {
...
exampleUseCase()
.subscribeOn(schedulerProvider.io())
.subscribe {
}
.addTo(disposable)
...
}
import io.reactivex.rxjava3.core.Scheduler
interface SchedulerProvider {
fun io(): Scheduler
fun computation(): Scheduler
fun ui(): Scheduler
}
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.schedulers.Schedulers
class StandardSchedulerProvider : SchedulerProvider {
override fun computation() = Schedulers.computation()
override fun ui() = AndroidSchedulers.mainThread()
override fun io() = Schedulers.io()
}
import io.reactivex.rxjava3.schedulers.TestScheduler
class TestSchedulerProvider(
private val scheduler: TestScheduler,
) : SchedulerProvider {
override fun computation() = scheduler
override fun ui() = scheduler
override fun io() = scheduler
}
import io.reactivex.rxjava3.schedulers.Schedulers
class TrampolineSchedulerProvider : SchedulerProvider {
override fun computation() = Schedulers.trampoline()
override fun ui() = Schedulers.trampoline()
override fun io() = Schedulers.trampoline()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment