我正嘗試將我的應用程序遷移到RxJava。 我已經使用Retrofit,因此我試圖使用Retrofit接口哪些方法返回Observables。 但是我現在遇到了編碼測試問題,因爲我無法使Observable在主線程上運行;我試圖爲它使用Scheduler.immediate()。 似乎Retrofit不允許重寫它的行爲,這對於真正的執行流程來說是完全有意義的,但它使測試變得非常困難。 因爲我剛剛開始使用RxJava + Retrofit,我只是希望我做錯了。是否有可能同步運行Retrofit觀測值?
下面是代碼的樣子:
@Test
public void shouldCompleteRequest() {
SomeRestRequest request = new SomeRestRequest(arg1, arg2);
TestSubscriber<SomeRestResponse> testSubscriber = new TestSubscriber<>();
new SomeRestCommand(mRestApi,
arg1, arg2
Schedulers.immediate(),
Schedulers.immediate(),
mMockEventBus).execute(request, testSubscriber);
testSubscriber.assertCompleted();
}
其中
public void execute(T request, Observer<S> observer) {
getCommand(request)
.observeOn(mObserveOnScheduler) //The test injects Schedulers.immediate()
.subscribeOn(mSubscribeOnScheduler) //The test injects Schedulers.immediate()
.subscribe(observer);
}
,
@Override
protected Observable<SomeRestResponse> getCommand(SomeRestRequest request) {
return mRestApi.restCommand(arg1, arg2);
}
和
public interface RestApi {
@GET("/someEndPoint")
Observable<SomeRestResponse> restCommand(@Query("arg1") String arg1, @Query("arg2") String arg2);
}
「改造不允許覆蓋它的行爲」 - 你能詳細說明嗎?沒有看到代碼很難說。 –
@AononHe,似乎不可能在主線程上運行Retrofit Observable,比如我想使用Scheduler.immediate()爲我的測試執行操作。 – nyarlathotep77