简体   繁体   English

Schedulers.immediate()不使用命令行gradle测试

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM