gpt4 book ai didi

unit-testing - 不依赖于 Android 的 JUnit 调度器

转载 作者:行者123 更新时间:2023-12-04 09:00:55 24 4
gpt4 key购买 nike

我正在尝试使用 MVP 来增强单元测试并更快地运行测试(因为我正在测试逻辑而不是 android 代码,所以我避免使用 RobotElectric 之类的东西)。

但是我使用的是 RXAndroid,它需要 Looper 才能获得 Schedulers.io()AndroidSchedulers.mainThread()当我尝试运行时

class Phone {
public Observable<> sendSms(String number){
//...
}
}

Phone.getInstance().sendSms(phoneNumber)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(phone -> {
mView.dismissProgress();
mView.startCodeView(phone);
}, error -> {
mView.dismissProgress();
mView.showError(error);
});

我得到:
Caused by: java.lang.RuntimeException: Method getMainLooper in android.os.Looper not mocked. See http://g.co/androidstudio/not-mocked for details.
at android.os.Looper.getMainLooper(Looper.java)
at rx.android.schedulers.AndroidSchedulers.<clinit>(AndroidSchedulers.java:27)
... 28 more

我试过:
android {
// ...
testOptions {
unitTests.returnDefaultValues = true
}
}

但它不起作用,因为我想运行完整的 JUnit 测试,而不是 Roboelectric 或 Espresso 的东西。

我怎样才能完成它?是否有任何调度程序不会因此而崩溃?

最佳答案

我也为此使用调度程序线程,但在我的测试设置和拆卸中。

@Before
public void setUp() throws Exception {
RxAndroidPlugins.getInstance().registerSchedulersHook(new RxAndroidSchedulersHook() {
@Override
public Scheduler getMainThreadScheduler() {
return Schedulers.immediate();
}
});
}

@After
public void tearDown() {
RxAndroidPlugins.getInstance().reset();
}

这会有所帮助吗?

关于unit-testing - 不依赖于 Android 的 JUnit 调度器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33058808/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com