gpt4 book ai didi

android - 使用 RxJava 的 IdlingResource Espresso

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:27:26 26 4
gpt4 key购买 nike

我最近将我的应用程序从使用异步任务转换为 rxjava。现在,由于 espresso 没有用于 rxjava 的空闲资源,我的 espresso 测试不再等待我的数据调用完成。我注意到你可以制作自定义空闲资源,但我不知道如何让它与 rxJava Schedulers,特别是 Scheduler.io 一起工作。任何帮助/最佳实践将不胜感激。

最佳答案

我是这样解决问题的:

IdlingResource 实现:

public class IdlingApiServiceWrapper implements MyRestService, IdlingResource {

private final MyRestService api;
private final AtomicInteger counter;
private final List<ResourceCallback> callbacks;

public IdlingApiServiceWrapper(MyRestService api) {
this.api = api;
this.callbacks = new ArrayList<>();
this.counter = new AtomicInteger(0);
}

public Observable<MyData> loadData(){
counter.incrementAndGet();
return api.loadData().finallyDo(new Action0() {
@Override
public void call() {
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
counter.decrementAndGet();
notifyIdle();
}
});
}
});
}

@Override public String getName() {
return this.getClass().getName();
}

@Override public boolean isIdleNow() {
return counter.get() == 0;
}

@Override public void registerIdleTransitionCallback(ResourceCallback resourceCallback) {
callbacks.add(resourceCallback);
}

private void notifyIdle() {
if (counter.get() == 0) {
for (ResourceCallback cb : callbacks) {
cb.onTransitionToIdle();
}
}
}
}

这是我的测试:

public class MyActivityTest extends ActivityInstrumentationTestCase2<MyActivity> {
@Inject
IdlingApiServiceWrapper idlingApiWrapper;

@Override
public void setUp() throws Exception {
//object graph creation

super.setUp();
getActivity();
Espresso.registerIdlingResources(idlingApiWrapper);
}

public void testClickOpenFirstSavedOffer() throws Exception {
onData(is(instanceOf(DataItem.class)))
.atPosition(0)
.perform(click());
}
}

我使用 Dagger 进行依赖注入(inject)。

关于android - 使用 RxJava 的 IdlingResource Espresso,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27138367/

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