Lan*_*tka 13 android automated-tests android-espresso
我正在用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;
}
}
Run Code Online (Sandbox Code Playgroud)
如果我在任何地方都错了,请纠正我(因为有时在我看来我的IdlingResources无法正常工作).我setUp()像这样注册空闲资源:
IRViewVisible ir = new IRViewVisible(View v);
Espresso.registerIdlingResources(ir).
Run Code Online (Sandbox Code Playgroud)
在tearDown()上取消注册.
我找到了这篇文章(有一个名为"注册一个绑定到Activity实例的组件"的部分) - 我没有使用他的模式,但我检查了注册后(在每个方法中)设置为IdlingResource的视图的哈希码,并且它是不一样的观点 - 所有的哈希都是不同的.
另一个问题:一个Test类(它的结果)对另一个Test类没有任何影响,可以吗?
我猜您的问题源于getName()为 IRViewVisible 的所有实例返回相同的名称。这意味着您一次只能拥有它的一个注册实例 - 任何后续注册都将失败(默默地!)。
您提到在每次测试结束时清除 IdlingResources,但如果您一次注册它的多个实例,则需要确保每个实例都有唯一的名称。如果您在单个 test 中注册 IRViewVisible 的多个实例,您的问题尚不清楚。
至于你的最后一个问题:是的,这是可能的。Android 不会在测试运行之间完全关闭应用程序 - 只是关闭活动。可能导致问题的常见情况:
顺便说一句,值得注意的是,您只能调用onTransitionToIdle()inside isIdleNow()。这是可行的(感谢 @Be_Negative 的提醒!),但它可能会大大减慢你的测试速度,因为 Espresso 只会isIdleNow()每隔几秒轮询一次。onTransitionToIdle()如果视图一变得可见就调用,它应该会大大加快速度。
我自己需要类似于你的 IRViewVisible 的东西,这是我的努力。
| 归档时间: |
|
| 查看次数: |
6015 次 |
| 最近记录: |