Как проверить Flowable, у которого есть подписка? - PullRequest
0 голосов
/ 10 марта 2020

Я знаю о TestSubscriber, и это действительно полезно, однако иногда есть логика c, относящаяся к подписке на Flowable, и это необходимо проверить.

Пример:

Flowable.just("Hello world!")
  .subscribe(s -> System.out.println(s),
    error -> {
      handler.handle("Scanning files");
    },
    () -> {
      handler.handle("Scanning files");
    }
  );

Если я хочу убедиться, что handler.handle("Scanning files") был вызван, каков наилучший способ сделать это - единственный способ «традиционного» насмешливого подхода?

Проблема с имитацией заключается в том, что если Flowable является более сложным, включая выполнение в нескольких потоках, становится трудно имитировать продвижение по времени и т. Д. c, что является хорошей причиной для использования TestSubscriber.

Ответы [ 2 ]

0 голосов
/ 10 марта 2020

Вы можете использовать Mockito как обычно, чтобы убедиться, что ваш обработчик был вызван:

verify(handler, only()).handle(any());

Проблема в том, как вы можете быть уверены, что строка перед вызовом вызывается после завершения метода suscribe?

Я вижу два варианта:

  • Вызов blockingSubscribe вместо subscribe
  • Изменение всех обработчиков потоков в основной поток (с помощью RxJavaPlugins)

Возможно, вы можете поставить Thread.sleep () перед проверкой, но я не думаю, что это хорошая идея.

TestSubscriber и TestScheduler - лучший способ проверить Observables для меня.

0 голосов
/ 10 марта 2020

Одним из способов является параметризация Scheduler и пропуск TestScheduler при настройке тестового прибора.

Таким образом, вы можете использовать методы advanceTimeBy и др.

...