SchedulersProvider can be omitted
NikolayKul opened this issue · 1 comments
NikolayKul commented
SchedulersProvider adds an extra overhead and can be safely ommitted using the following Rule:
public class RxSchedulersRule implements TestRule {
private final TestScheduler testScheduler = new TestScheduler();
private final RxAndroidSchedulersHook androidSchedulersHook = new RxAndroidSchedulersHook() {
@Override
public Scheduler getMainThreadScheduler() {
return Schedulers.trampoline();
}
};
public TestScheduler getTestScheduler() {
return testScheduler;
}
@Override
public Statement apply(Statement base, Description description) {
return new Statement() {
@Override
public void evaluate() throws Throwable {
RxAndroidPlugins.getInstance().registerSchedulersHook(androidSchedulersHook);
RxJavaHooks.setOnIOScheduler(scheduler -> testScheduler);
RxJavaHooks.setOnComputationScheduler(scheduler -> testScheduler);
RxJavaHooks.setOnNewThreadScheduler(scheduler -> testScheduler);
base.evaluate();
RxAndroidPlugins.getInstance().reset();
RxJavaHooks.reset();
}
};
}
}
Example of usage:
public class UseCaseTest {
@Rule
public RxSchedulersRule rxSchedulersRule = new RxSchedulersRule();
private UseCase useCase;
@Before
public void setUp() throws Exception {
useCase = ...
}
@Test
public void some_usecase_test() throws Exception {
// preparing
...
// testing
useCase.execute();
rxSchedulersRule.getTestScheduler().triggerActions();
// asserting
...
}
}
ImangazalievM commented
Thanks for your suggestion, I will fix it in the next version.