我正在尝试模拟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);