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

10-08 17:09