Android ApplicationをRobolectricでtestしていて、 どうにも困ったのでメモです。
状況は、Android Applicationで、 Robolectricを使っていて、 Retrofit2でPOST
しにいく部分(受け手はMockWebServer)のunit testで、 突然NullPointerException
になってsubscribe
のerror
に入ってしまう、というもの。 breakpointで追っていってもcall()
で突如NPEに入ってしまって、 具体的にどこでNPEに陥っているのかよく分かりませんでした。 Googleで探してみると、 Stack Overflowにそれらしき投稿があり、 .observeOn(AndroidSchedulers.mainThread())
は LooperScheduler
なのでここでNPEになる、 だからRxAndroidPlugins
のregisterSchedulersHook()
で Schedulers.immediate()
してやると良い、 と書いてあって、やったー! と思ったものの、効果なく。
結局そうではなくて、 MockWebServer使っているからhttp://localhost:NNNN/...
に requestを改装しているせいなんですけど、 SecurityPolicy絡みのExceptionが裏で出ているようで、 以下のようなShadowを用意して@Config({shadows=...})
に 書いてやればそのままですんなり行きました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
勿論、.subscribeOn(Schedulers.io())
に対しては RxJavaHooks.setOnIOScheduler(s -> Schedulers.immediate());
した上で、です。