Skip to content

Instantly share code, notes, and snippets.

@alexshr
Created May 6, 2017 19:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save alexshr/3846cfc7d8ee406d9b2be8d07b0a3524 to your computer and use it in GitHub Desktop.
Save alexshr/3846cfc7d8ee406d9b2be8d07b0a3524 to your computer and use it in GitHub Desktop.
Test rule for rxjava test (override schedulers for testing, reset hook).
package com.skb.goodsapp;
import org.junit.rules.TestRule;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;
import io.reactivex.Scheduler;
import io.reactivex.android.plugins.RxAndroidPlugins;
import io.reactivex.internal.schedulers.ExecutorScheduler;
import io.reactivex.plugins.RxJavaPlugins;
import io.reactivex.schedulers.TestScheduler;
/**
* Override schedulers for testing.
* Avoid try/finally block in test body (reset the hook).
*/
public class TestSchedulerRule implements TestRule {
private final Scheduler immediate = new Scheduler() {
@Override
public Worker createWorker() {
return new ExecutorScheduler.ExecutorWorker(Runnable::run);
}
};
private final TestScheduler testScheduler = new TestScheduler();
public TestScheduler getTestScheduler() {
return testScheduler;
}
@Override
public Statement apply(final Statement base, Description d) {
return new Statement() {
@Override
public void evaluate() throws Throwable {
RxJavaPlugins.setIoSchedulerHandler(
scheduler -> testScheduler);
RxJavaPlugins.setComputationSchedulerHandler(
scheduler -> testScheduler);
RxJavaPlugins.setNewThreadSchedulerHandler(
scheduler -> testScheduler);
RxAndroidPlugins.setMainThreadSchedulerHandler(
//scheduler -> immediate
scheduler -> testScheduler);
try {
base.evaluate();
} finally {
RxJavaPlugins.reset();
RxAndroidPlugins.reset();
}
}
};
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment