In our previous examples, did you notice that testing a time-driven Observable or Flowable requires that time to elapse before the test completes? In the last example, we took five emissions from an Observable.interval() emitting every 1 second, so that test took 5 seconds to complete. If we have a lot of unit tests that deal with time-driven sources, it can take a long time for testing to complete. Would it not be nice if we could simulate time elapses rather than experiencing them?
TestScheduler does exactly this. It is a scheduler implementation that allows us to fast-forward by a specific amount of elapsed time, and we can do any assertions after each fast-forward to see what events have occurred.
In the following example, we create a test against Observable.interval() that emits every minute:
import io.reactivex.rxjava3.core.Observable...