Created
May 6, 2017 19:44
-
-
Save alexshr/3846cfc7d8ee406d9b2be8d07b0a3524 to your computer and use it in GitHub Desktop.
Test rule for rxjava test (override schedulers for testing, reset hook).
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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