Это для целей модульного тестирования, так как я хочу проверить правильное поведение для функции, в которой два источника данных могут возвращаться в разных порядках.В настоящее время в моем модульном тесте я создаю Observable с фиктивными данными и просто использую оператор задержки, чтобы добавить задержку в 10 миллисекунд для источника данных, который я хочу вернуть вторым.Однако это кажется немного уродливым и может стать проблематичным, так как у меня все больше и больше тестов.
Есть ли способ заставить Observable ждать, пока не завершится другой Observable?
Редактировать: вотпример модульного теста, который у меня есть
public void testNetworkReturningBeforeLocal() {
Item localItem = new Item("local");
Item remoteItem = new Item("remote");
when(mDatabaseMock.getItem(any())).thenReturn(Observable.just(localItem).delay(10, TimeUnit.MILLISECONDS);
when(mApiMock.getItem(any())).thenReturn(Observable.just(remoteItem));
TestObserver<Item> observer = new TestObserver<>();
mRepository.getItem("blah").subscribe(observer); // calls getItem from database and API
observer.awaitTerminalEvent();
observer.assertResult(remoteItem);
}
Я использую delay(10, TimeUnit.MILLISECONDS)
на наблюдаемой, возвращаемой базой данных, для имитации сетевого ответа, поступающего первым.То, что я хотел бы сделать, это задержать наблюдаемую базу данных до завершения наблюдаемой сети.