3

RxJava コード部分の単体テストに問題があります。以下の方法をテストしたいと思います。プレゼンター方式です。

public void onSearchQueryChanged(String searchQuery) {
    backendService.getShopResultsCount(searchQuery)
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(result -> {
            if (isViewAttached()) {
                getView().hideShopSearchInProgress();
                getView().displayShopSearchResultCount(result.getSearchResponse().getNumberOfHits());
            }
        }, error -> {
            if (isViewAttached()) {
                getView().hideShopSearchInProgress();
            }
        });
}

最良の場合backendService、特定の検索クエリとアタッチ/デタッチ ビューでこのユースケースをモックしてテストしたいと思います。

私はいくつかの調査を行いtoBlocking()test()方法を認識しています。彼らは皆、私が利用可能であると想定していObservableます。どうにかしてメソッドを分割する必要があると思います。それに対するあなたのアプローチは何ですか?

私のスタック: RxJava2、短剣、MVP。

4

2 に答える 2

2

私たちのプロジェクトでは、次のようなコードを書きます。

Mockito.when(backendService.getShopResult(Mockito.any())).thenReturn(Observable.just(Some Data)

次の方法でスケジューラを回避できます。

@Inject
Scheduler subscribeOn;

そして、テストパスSchedulers.test()またはSchedulers.immediate()

または使用できませTestRuleRxJavaPlugins.registerSchedulersHook()

于 2016-12-20T13:11:30.193 に答える