[英]Schedulers.immediate() not working with command line gradle tests
I'm trying to test a presenter that use RxJava to retrieve data from an interactor. 我正在尝试测试使用RxJava从交互器检索数据的演示者。 In the setup method I'm doing something like:
在设置方法中,我正在执行以下操作:
@Before
public void setup() {
RxAndroidPlugins.getInstance().registerSchedulersHook(new RxAndroidSchedulersHook() {
@Override
public Scheduler getMainThreadScheduler() {
return Schedulers.immediate();
}
});
}
So in my test method I can test the presenter call: 所以在我的测试方法中,我可以测试演示者调用:
@Test
public void testLoad() {
presenter.load();
verify(view).dataLoaded(data);
verify(interactor).load();
}
If I run the test with Android Studio everything work as expected, the issue is that If I try on command line 如果我使用Android Studio运行测试,一切都按预期工作,问题是如果我尝试命令行
gradle test
Then the test fails because: Actually, there were zero interactions with this mock.
然后测试失败,因为:
Actually, there were zero interactions with this mock.
So I've tried to put a Thread.sleep(2000) right after the call to the presenter and then it works, so I guess the Schedulers.immediate(); 所以我试图在调用演示者之后立即放置一个Thread.sleep(2000),然后它就可以工作了,所以我猜测Schedulers.immediate(); is not working from command line but I have no idea why and how to debug/fix.
不是从命令行工作,但我不知道为什么以及如何调试/修复。 Do you have any idea?
你有什么主意吗?
EDIT: presenter implementation -> 编辑:演示者实现 - >
public void load() {
Observable<List<Data>> obs = interactor.load()
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io());
obs.subscribe(new Observer<List<Data>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(List<Data> data) {
view.dataLoaded(data);
}
});
}
You can mock RxJava Schedulers as well. 您也可以模拟RxJava调度程序。
RxJavaHooks.reset();
RxJavaHooks.setOnIOScheduler(scheduler -> Schedulers.immediate());
Typically a good thing to call reset on setup & teardown. 通常在设置和拆卸时调用重置是一件好事。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.