Я пытаюсь перенести свое приложение для работы с RxJava. Я уже использую Retrofit и поэтому пытаюсь использовать интерфейс Retrofit, методы которого возвращают Observables. Однако теперь у меня проблемы с тестами кодирования, так как я не могу заставить Observable работать в основном потоке; Я пытаюсь использовать для этого Scheduler.immediate(). Кажется, что Retrofit не позволяет переопределить его поведение, что имеет смысл для реального потока выполнения, но очень затрудняет тестирование. Поскольку я только начал с RxJava + 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);
}