PowerMock-从延迟的RxJava流中调用的静态方法

问题描述 投票:0回答:1

我正在尝试模拟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();
android rx-java2 powermock
1个回答
0
投票

如果延迟了RxJava流后调用了模拟的静态方法,则必须通过TestScheduler设置RxJavaPlugins处理程序以使静态模拟生效:

private final TestScheduler testScheduler = new TestScheduler();

...

RxJavaPlugins.setComputationSchedulerHandler(schedulerCallable -> testScheduler); 
© www.soinside.com 2019 - 2024. All rights reserved.