bla*_*her 5 java android rx-java
这里的逻辑是,如果数据库中的等级为空,那么我想从API中获得它们。我有以下代码:
Observable.from(settingsRatingRepository.getRatingsFromDB())
.toList()
.switchIfEmpty(settingsRatingRepository.getSettingsRatingModulesFromAPI())
.compose(schedulerProvider.getSchedulers())
.subscribe(ratingsList -> {
view.loadRatingLevels(ratingsList, hideLocks);
}, this::handleError);
Run Code Online (Sandbox Code Playgroud)
该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);
Run Code Online (Sandbox Code Playgroud)
正如@Kiskae提到的,这是我将一个空列表与一个空Observable混淆的事实。因此,我使用了以下内容:
public void onViewLoad(boolean hideLocks) {
Observable.just(settingsRatingRepository.getRatingsFromDB())
.flatMap(settingsRatings -> {
if (settingsRatings.isEmpty()) {
return settingsRatingRepository.getSettingsRatingModules();
} else {
return Observable.just(settingsRatings);
}
})
.compose(schedulerProvider.getSchedulers())
.subscribe(ratingsList -> {
view.loadRatingLevels(ratingsList, hideLocks);
}, this::handleError);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9144 次 |
| 最近记录: |