- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用 Espresso 编写 UI 测试。应用程序与服务器紧密合作,因此在很多情况下,我需要等待计算值,或者获取并显示数据等。Espresso 建议为此使用 IdlingResource。我的 IdlingResource 类看起来像这样(简单明了的示例)。
public class IRViewVisible implements IdlingResource {
private View view;
private ResourceCallback callback;
public IRViewVisible(View view) {
this.view = view;
}
@Override
public String getName() {
return IRViewVisible.class.getName();
}
@Override
public boolean isIdleNow() {
if(view.getVisibility() == View.VISIBLE && callback != null) {
callback.onTransitionToIdle();
return true;
}
return false;
}
@Override
public void registerIdleTransitionCallback(ResourceCallback resourceCallback) {
this.callback = resourceCallback;
}
}
如果我有任何错误,请纠正我(有时在我看来,我的 IdlingResources 无法正常工作)。我像这样在 setUp()
中注册空闲资源:
IRViewVisible ir = new IRViewVisible(View v);
Espresso.registerIdlingResources(ir).
在 tearDown() 上注销它。
我找到了 this article (有一个名为“注册一个与 Activity 实例绑定(bind)的组件”的部分)——我不使用他的模式,但我检查了注册后设置为 IdlingResource 的 View 的哈希码(在每个方法中),它不是同一个 View ——所有的哈希值都是不同的。
另一个问题:一个测试类(它的结果)不能对另一个测试类产生任何影响,是吗?
最佳答案
我猜您的问题源于 getName()
为 IRViewVisible 的所有实例返回相同的名称。这意味着您一次只能拥有它的一个注册实例 - 任何后续注册都将失败(静默!)。
您提到您在每次测试结束时清除了 IdlingResources,但是如果您同时注册它的多个实例,则需要确保每个实例都有一个唯一的名称。如果您在单个测试中注册 IRViewVisible 的多个实例,您的问题并不清楚。
关于您的最后一个问题:是的,这是可能的。 Android 不会在测试运行之间完全关闭应用程序——只是关闭 Activity 。可能导致问题的常见事情:
顺便说一句,值得注意的是您只在 isIdleNow()
中调用了 onTransitionToIdle()
。这可行(感谢@Be_Negative 的提醒!)但它可能会大大减慢您的测试速度,因为 Espresso 只会每隔几秒轮询一次 isIdleNow()
。如果您在 View 可见时立即调用 onTransitionToIdle()
,它应该会大大加快处理速度。
我自己需要类似于您的 IRViewVisible 的东西,here's my effort .
关于android - 在 Espresso Android 中使用 IdlingResource 的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32012607/
我需要告诉 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 ,但我想以正确的方式进行(如果已经完成,则不要重新发明
我是一名优秀的程序员,十分优秀!