gpt4 book ai didi

retrofit - 是否可以同步运行 Retrofit observable?

转载 作者:行者123 更新时间:2023-12-01 11:21:05 29 4
gpt4 key购买 nike

我正在尝试迁移我的应用程序以使用 RxJava。我已经在使用 Retrofit,因此我正在尝试使用方法返回 Observables 的 Retrofit 接口(interface)。但是我现在在针对它进行编码测试时遇到问题,因为我无法让 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);
}

最佳答案

如果您修改测试以添加 testSubscriber.awaitTerminalEvent();,那么您的测试将等待调用完成,因此测试将通过。您仍然需要执行 assertCompleted(),因为终端事件可以是成功完成也可以是错误。

@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.awaitTerminalEvent(); // add this line here
testSubscriber.assertCompleted();
}

我查阅了 Retrofit 1.9.0 的源代码,根据 RxSupport 类,调用总是在 httpExecutor 提供的单独线程中执行。因此,使用 Schedulers.immediate() 不会导致调用发生在主线程中。

关于retrofit - 是否可以同步运行 Retrofit observable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34958030/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com