observeOn(AndroidSchedulers.mainThread())
を使用しているプレゼンターに対してJUnitテストを実行しようとすると、RuntimeExceptionが発生します。Android RxJava 2 JUnit test - android.os.LooperのgetMainLooperが模擬されていないRuntimeException
彼らは純粋なJUnitテストではなくAndroidの計装試験であるので、彼らはテストを実行するときに、私は次のエラーが発生する原因、Androidの依存関係へのアクセスを持っていない:
java.lang.ExceptionInInitializerError
at io.reactivex.android.schedulers.AndroidSchedulers$1.call(AndroidSchedulers.java:35)
at io.reactivex.android.schedulers.AndroidSchedulers$1.call(AndroidSchedulers.java:33)
at io.reactivex.android.plugins.RxAndroidPlugins.callRequireNonNull(RxAndroidPlugins.java:70)
at io.reactivex.android.plugins.RxAndroidPlugins.initMainThreadScheduler(RxAndroidPlugins.java:40)
at io.reactivex.android.schedulers.AndroidSchedulers.<clinit>(AndroidSchedulers.java:32)
…
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 io.reactivex.android.schedulers.AndroidSchedulers$MainHolder.<clinit>(AndroidSchedulers.java:29)
...
java.lang.NoClassDefFoundError: Could not initialize class io.reactivex.android.schedulers.AndroidSchedulers
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
…
それは魔法のように動作します:) –
plsはまた、あなたがにStackOverflowError –
更新に実行する場合、必要になることがあります小さな変更のために私の答えをチェック: あなたはスケジューラを設定するには、RxJavaHooksメソッドを使用することができます。 はまた、あなたは利用可能TestSchedulerを持っているだけでなく、単にSchedulers.immediate()私はRxJavaHooksがRxJava 2で除去し、それが機能は今RxJavaPlugins –