Gre*_*ion 16 android android-testing android-espresso
该场景是当用户点击"下载"按钮时,开始从互联网下载数据(音乐/图像等).下载完成后,按钮会将标签文本更改为"打开".然后用户单击"打开"按钮.我所做的就是:
onView(allOf(withId(R.id.button),withText("Download"))).check(matches(isClickable())).perform(click());
try {
Thread.sleep(delayedTime);
} catch (InterruptedException e) {
e.printStackTrace();
}
onView(allOf(withId(R.id.button),withText("Open"))).check(matches(isClickable())).perform(click());
Run Code Online (Sandbox Code Playgroud)
有时测试通过,有时它不会.有时它失败的原因是"No views in hierarchy found matching: (with id: something:id/button and with text: is "Open").
我知道在Espresso中使用Thread.sleep也是不好的做法.我读过Espresso的闲置资源,但它对我没有意义,我不知道如何在这个特殊情况下应用它.
小智 39
实际上,闲置资源是Espresso最难点.
如果在测试中你必须等待/同步一些异步后台任务,你应该实现它.默认情况下,Espresso会等待当前消息队列中的UI操作进行处理,并且默认AsyncTasks(与默认的AsyncTask线程池同步)在完成下一个测试操作之前完成.请查看AsyncTasks.但是,如果您启动另一个线程,例如与某些Web服务进行通信,则应该使用IdlingResource.
任何Thread.sleep()你可能需要的是,你可以需要一个闲置资源的信号.
现在关于如何编写一个空闲资源.代码开发人员可以很容易地完成它,因为他们现在如何进行这一评估.
它应该是这样的:
public class DownloadIdlingResource extends BaseIdlingResource { ....}
Run Code Online (Sandbox Code Playgroud)
它应该定义此资源何时空闲.....
测试,想要说Espresso需要等待这个空闲资源,应该在测试类初始化期间定义这个空闲资源(setUp()等等)或在需要时激活它.这意味着你有一些等待但尚未激活的东西.例如,下载的空闲资源可以有一个监听器,用于setIdle(false)在启动下载时将空闲资源设置为非空闲(),并在完成(setIdle(true))时设置回空闲状态.如果所有闲置资源都空闲,Espresso将继续其他所有员工(无需等待完成).空闲资源的实现细节很大程度上取决于应用程序实现.
关于闲置资源的一般情况可以说:
1)isIdleNow()在资源空闲时实现逻辑
2)registerIdleTransitionCallback当资源注册时,Espresso会调用它,并会给你一个ResourceCallback.
3)当资源从忙碌变为空闲时,实际上您从后台任务获得操作已完成的回调(已下载地图数据或下载已取消)您必须callonTransitionToIdle()在注册时进行回调ResourceCallback.
4)getName()您必须返回用于记录的资源的名称.
请注意不要像闲置资源那样死锁.空闲资源超时.可以通过消息解释怠速资源的坏处来中断测试.
对不起,我不能写更具体的例子,但这实际上取决于你的应用程序实现.
| 归档时间: |
|
| 查看次数: |
11727 次 |
| 最近记录: |