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

标签 unit-testing rx-java android-testing rx-android

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

相关文章:

Android:为了测试目的注入(inject)假相机预览

android - 测试 RxJava 无限间隔

android - 在多个订阅者之间共享 RxBindings Observable 事件

java - 如何使用 RxJava 和 Android 订阅任务的执行

android - 如何运行模块的测试以及我的应用程序测试

android - 如何对我的 Android 服务启动特定 Activity 进行单元测试?

c# - 使用 Moq 针对异步方法设置 C# 测试

swift - 如何覆盖私有(private) init

java - Android 为实用方法编写单元测试

android - Android 中的 RXJava 没有 RXAndoid lib?