- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我最近将我的应用程序从使用异步任务转换为 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/
我需要告诉 Espresso 等到我的 Activity 空闲。我正在使用界面IdlingResource为达到这个。这是我用于测试的代码: public class MyActivity e
我注意到 Espresso 每五秒轮询一个特定的 IdlingResource 的 isIdleNow() 方法。 是否可以调整这个粒度? 提前致谢! 最佳答案 简答: 不,从 3.0.1 版开始,它
我想使用空闲资源,因为我在我的应用程序中使用 RxJava 和 EventBus,有时我的测试会失败(我认为这是因为同步)。 依赖关系: androidTestCompile 'com.android
我在使用 Espresso 进行测试时遇到了空闲资源的问题。 这是行不通的。它只被调用两次,仅此而已,即使返回 false。 public class MyIdlingResource impleme
我正在尝试测试 MyActivity 在传递不正确的 intent extras 时显示一个警告对话框。这是一个 url,所以我将 url 传递给内部 webView 以加载 url 并在发生任何错误
我有以下 Espresso 代码: @Test fun backgroundWorkDisplaysTextAfterLoading() { onView(withId(R.id.btn_ne
我正在尝试找到一种方法来很好地实现一个 IdlingResource,它将轮询 CoroutineDispatcher 的 isActive 属性。但是,从调试来看,检查此属性时似乎从来没有 Acti
我是 Espresso 的新手,正在尝试在 fragment 上编写测试,在 fragment 实例化时进行 Retrofit 调用。接到电话后,我想检查 fragment 以查看 View 是否存在
我最近将我的应用程序从使用异步任务转换为 rxjava。现在,由于 espresso 没有用于 rxjava 的空闲资源,我的 espresso 测试不再等待我的数据调用完成。我注意到你可以制作自定义
我正在尝试测试 AutoCompleteTextView 是否会在键入某些单词后显示项目。但是在键入和显示弹出窗口之间存在延迟。首先,我使用的是 Thread.sleep(),它工作得很好。但我知道这
我有一个 Activity 。它包含 fragment ,这个 fragment 有 RecyclerView。从服务器加载的一些数据并显示在 RecyclerView 的第一项中。 我需要为此项目设
我希望能够让 Espresso 将 Picasso 作为 IdlingResource 进行监控,以便我可以运行 ViewMatcher s 一旦图像已成功加载。 通过浏览 Picasso 源代码,我
我正在尝试编写 Espresso 单元测试,该测试依赖于与外部应用程序建立 TCP/IP 网络连接以便成功通过的组件。 测试失败是因为 TCP/IP 网络花费的时间比 Espresso 允许的时间长.
我正在使用 Espresso 编写 UI 测试。应用程序与服务器紧密合作,因此在很多情况下,我需要等待计算值,或者获取并显示数据等。Espresso 建议为此使用 IdlingResource。我的
我有一个托管 fragment F1 的 Activity 。单击按钮后,F1 将替换为另一个 fragment F2。按下后退按钮时,应用会通过退出过渡动画从 F2 返回到 F1。 我的 Espre
我基本上有一个自定义的 IdlingResource,它接受一个 View 构造函数参数。我找不到任何真正谈论如何实现它的地方。 我正在尝试使用这个答案:https://stackoverflow.c
在这里,我想要一个自定义的查找 View 函数:如果使用给定的 Matcher 在 10 秒内找不到 View ,则返回 bool 值 false,否则返回 View 。注意,我不想使用 Idling
在我的测试中,我有一个阶段,在按下按钮后,应用程序会执行大量异步计算并向云服务发出请求,之后它会显示特定 View 。 是否可以使用 Espresso 的 IdlingResource 实现来等待某个
我正在尝试将我的一些 Robotium 单元测试转换为使用 Espresso,但在通过测试更新 UI 时遇到了问题。该测试针对的是一个 fragment ,该 fragment 是一种显示来自对象的数
我正在编写集成测试,在 UI 中执行操作,使用 Retrofit 启动网络调用。 我知道我需要实现 CountingIdlingResource ,但我想以正确的方式进行(如果已经完成,则不要重新发明
我是一名优秀的程序员,十分优秀!