Тестирование RxJava2 doOnComplete ()

Как видно из приведенного ниже кода, я doOnComplete() проверить поведение doOnComplete() происходящего в моем репозитории. Однако, когда я doOnComplete() над doOnComplete() зависимостью моего клиента, где я возвращаю элементы, используя Observable.just() , doOnComplete() больше не вызывается. Я считаю, что это преднамеренно, как в RxJava2. Я не уверен, как обойти это.

 @Singleton public class Repository { private SomeNetworkClient client; private SomeCache cache; @Inject public Repository(SomeNetworkClient client, SomeCache cache) { this.client = client; this.cache = cache; } public Observable<SomeItem> getSomeItem() { return client.getSomeItem() .doOnComplete(() -> cache.doThisOnComplete()) .doOnError(throwable -> someError); } } public class RepositoryTest { private Repository testedRepository; @Mock SomeNetworkClient client; @Mock SomeCache cache; @Mock SomeItem someItem; @Before public void setup() { MockitoAnnotations.initMocks(this); testedRepository = new Repository(client, cache); when(client.getSomeItem()) .thenReturn(Observable.just(someItem)); } @Test public void thisTestFails() { testedRepository.getSomeItem().blockingFirst(); // This fails because it appears that mocking with // Observable.just() makes doOnComplete() not be invoked. verify(cache.doThisOnComplete()); } } 

Проблема в вашем коде заключается в том, что blockingFirst() не хочет слушать полное событие. Он немедленно вернет первый элемент из потока и удалит его из наблюдаемого .

Вместо этого вы можете выполнить утверждение таким образом:

testedRepository .getSomeItem() .test() .assertComplete()
testedRepository .getSomeItem() .test() .assertComplete() 
Intereting Posts
Шаблон панели управления Android Как мне упаковать файлы .so в мой архив .aar? Как остановить / отменить диспетчер аварийных сигналов в другом действии? Установка даты / времени с использованием оболочки ADB Ведение позиции Drag & Dropped при перезапуске Ошибка кинжала 2: зависимость «не может быть предоставлена ​​без конструктора @Inject», в то время как она фактически аннотируется с помощью @Inject Возобновить загрузку с Android-менеджера загрузки при неудачной загрузке NullPointerException на кнопке OnClickListener Установите фокус на кнопку Неровность сосудов! Панель инструментов sherlock и facebook sdk Как полностью предотвратить прокрутку TextView? Как отключить GSM-соединение в Android программно Как получить язык (локаль) в настоящее время отображается Android-приложение? Разница между START_STICKY и START_REDELIVER_INTENT? Как получить pid приложения Android с помощью оболочки adb?