Тестируемая RxJava

22
Тестируемая rxJava Виктория Сулейманова Rambler&Co

Transcript of Тестируемая RxJava

Тестируемая rxJava

Виктория Сулейманова

Rambler&Co

Observable

Observable

Observable

Observable

Observable

filter

init

sort

map

2

Observer pattern

3

Observable SubscriberData

Subscriber

4

subscribeOn & observeOn

5

Преобразование списка видов

спорта в последовательность их

названий

6

Mockito

7

Тестирование логики

преобразования

последовательности

8

BlockingObservable

9

TestSubscriber

10

TestScheduler

11

Виртуальное время

12

Data1 Data2 Data3

20 сек 8 сек

triggerActions()

advanceTimeTo(28, TimeUnit.SECONDS)

advanceTimeBy(20, TimeUnit.SECONDS)

advanceTimeBy(8, TimeUnit.SECONDS)

Постановка задачи

13

Twitter

текстовый блок с «Чемпионат»

Тестирование корректной

последовательности при дозагрузке

данных

14

Анонимный Subscriber

15

Тестирование анонимного

Subscriber

16

Именованный

Subscriber

17

Тестирование

именованного Subscriber.

TestSubject

18

Rx Plugins: Пример

логирования

19

Creating class rx.internal.operators.OnSubscribeRange

Creating class rx.internal.operators.OnSubscribeMap

Creating class rx.internal.operators.OnSubscribeFilter

Rx Plugins: Подмена стандартных Schedulers:

io, computation, newThread

20

Hello from: main

Выводы

• Код с rxJava - тестируемый

• Нужно помнить о правильных Schedulers в тестовом окружении

• TestSubscriber и TestScheduler позволяют с легкостью

протестировать любой Observable

• TestSubject отлично подходит для тестирования именованных

Subscribers

21

Ответы на часто задаваемые

вопросыflatMap, concatMap, switchMap - в чем разница?

• flatMap - получим все onNext от предыдущего Observable, но порядок их не

гарантируется

• concatMap - получим все onNext только после завершения предыдущего Observable

• switchMap - отписывается от всех предыдущих Observable, какие-то onNext можем не

получить

Scheduler.io() vs Scheduler.computation()?

• io - количество потоков в пуле не ограничено, добавляется новый поток по

необходимости, хорошо для использования нересурсоемких задач т.к. переключение

между потоками затратная операция

• computation - число потоков равно числу ядер процессора, подходит для интенсивных

задач

22