我正在尝试使用 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/