PowerMock - статические методы, вызываемые из отложенного потока RxJava - PullRequest
1 голос
/ 07 октября 2019

Я пытаюсь смоделировать 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();

1 Ответ

1 голос
/ 07 октября 2019

Если ваш смоделированный статический метод вызывается после задержки в потоке RxJava, вы должны установить обработчик TestScheduler через RxJavaPlugins, чтобы статический макет вступил в силу:

private final TestScheduler testScheduler = new TestScheduler();

...

RxJavaPlugins.setComputationSchedulerHandler(schedulerCallable -> testScheduler); 
...