这里的逻辑是,如果数据库中的评分为空,那么我希望从API获取它们。 我有以下代码:
Observable.from(settingsRatingRepository.getRatingsFromDB())
.toList()
.switchIfEmpty(settingsRatingRepository.getSettingsRatingModulesFromAPI())
.compose(schedulerProvider.getSchedulers())
.subscribe(ratingsList -> {
view.loadRatingLevels(ratingsList, hideLocks);
}, this::handleError);
getRatingsFromDB()
调用返回List<SettingRating>
,但API调用返回Observable<List<SettingRating>>
。然而,在进行单元测试时,当我从数据库调用传递一个空列表时,它不会执行API调用。请有人帮我解决这个问题。这是我的单元测试代码:
when(mockSettingsRatingsRepository.getRatingsFromDB()).thenReturn(Collections.emptyList());
List<SettingsRating> settingsRatings = MockContentHelper.letRepositoryReturnSettingsRatingsFromApi(mockSettingsRatingsRepository);
settingsParentalPresenter.onViewLoad(false);
verify(mockView).loadRatingLevels(settingsRatings, false);
getRatingsFromDB()
方法返回一个List<SettingRating>
,但API调用返回一个Observable<List<SettingRating>>
。 - blackpantherObservable.just()
和Observable.filter()
来清空可观察对象(如果列表为空)。因此,代码如下:Observable.just(getRatingsFromDB()).filter(list -> !list.isEmpty())
。 - Kiskae