我正在尝试模拟BluetoothAdapter.getDefaultInstance()
,它在通常的实现中效果很好,但是在通过延时的RxJava流访问该模拟时失败了。
好像是我打来的电话...
when(BluetoothAdapter.getDefaultAdapter()).thenReturn(null)
...从未制造过,我们会收到一个典型的例外:
java.lang.RuntimeException: Method getDefaultAdapter in android.bluetooth.BluetoothAdapter not mocked
上下文位于类似于以下内容的流中:
Observable
.delay(1000, TimeUnit.MILLISECONDS)
.doFinally(() -> BluetoothAdapter.getDefaultInstance().getBluetoothLeScanner().stopScan())
.subscribe();
如果延迟了RxJava流后调用了模拟的静态方法,则必须通过TestScheduler
设置RxJavaPlugins
处理程序以使静态模拟生效:
private final TestScheduler testScheduler = new TestScheduler();
...
RxJavaPlugins.setComputationSchedulerHandler(schedulerCallable -> testScheduler);