Тестирование 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()