Espresso:自定义Idling Resource
来源:互联网 发布:龙与地下城ol 知乎 编辑:程序博客网 时间:2024/06/07 01:17
原文地址:http://www.jianshu.com/p/9bda5f58daf1
Espresso的一个关键功能是测试程序和被测应用是同步执行的。这是基于idling的概念:Espresso等待app处于idle状态,才会执行下个动作和检查下个断言。
Idle
app处于idle状态是什么意思?Espresso检查下面几个场景:
- 在当前消息队列中没有UI事件;
- 在默认的AsyncTask线程池没有任务;
但是,如果app以其他方式执行长时间运行操作,Espresso不知道如何判断这些操作已经完成。如果是这样的话,可以通过编写自定义的IdelingResource来通知Espresso的等待时间。
IntentServiceIdlingResource
假设你使用IntentService
来做一些长时间运算,然后通过broadcast将结果返回给activity。我们希望Espresso一直等到结果返回,才来验证界面显示正确。
为了实现IdlingResource,需要重写3个函数:getName()
,registerIdleTransitionCallback()
,isIdleNow()
。
@Overridepublic String getName() { return IntentServiceIdlingResource.class.getName();}@Overridepublic void registerIdleTransitionCallback(ResourceCallback resourceCallback) { this.resourceCallback = resourceCallback;}@Overridepublic boolean isIdleNow() { boolean idle = !isIntentServiceRunning(); if (idle && resourceCallback != null) { resourceCallback.onTransitionToIdle(); } return idle;}private boolean isIntentServiceRunning() { ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); for (ActivityManager.RunningServiceInfo info : manager.getRunningServices(Integer.MAX_VALUE)) { if (RepeatService.class.getName().equals(info.service.getClassName())) { return true; } } return false;}
idle逻辑是在isIdleNow()
实现的。在这个例子中,我们通过查询ActivityManager
来检查IntentService
是否正在运行。如果IntentService
停止运行,我们调用resourceCallback.onTransitionToIdle()
来通知Espresso。
注册idling resource
为了让Espresso等待自定义的idling resource,你需要注册它。在测试代码的@Before
方法中执行注册,在@After
中执行注销。
@Beforepublic void registerIntentServiceIdlingResource() { Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation(); idlingResource = new IntentServiceIdlingResource(instrumentation.getTargetContext()); Espresso.registerIdlingResources(idlingResource);}@Afterpublic void unregisterIntentServiceIdlingResource() { Espresso.unregisterIdlingResources(idlingResource);}
完整示例
Check out完整示例的源码。尝试注释掉IdlingResource
注册,测试会失败。
原文链接:http://www.jianshu.com/p/9bda5f58daf1
- Espresso:自定义Idling Resource
- Espresso:自定义Idling Resource
- Espresso Idling Resource
- Espresso Idling Resource 使用
- 深入研究Espresso的Idling Resource
- espresso之自定义Matcher
- Espresso
- 自定义$resource指令
- android espresso
- Espresso简介
- Espresso basics
- Espresso 基础
- Espresso学习笔记二:Espresso基础知识
- Espresso学习笔记二:Espresso基础知识
- Espresso指南二(Espresso意图)
- resource
- resource
- Resource
- Effective Objective-C 2.0 第13条:用“方法调配技术”调试“黑盒方法”
- 栈、队列、背包的数组与链表实现
- thinkphp 使用 kindEditor
- ssh免密码登录远程server
- (1)设计模式初窥
- Espresso:自定义Idling Resource
- 使用spring @Scheduled注解执行定时任务、
- Ibatis和Hibernate 数据库分表(动态表名映射)的实现方法
- Chrome扩展开发学习笔记之带选项页面的扩展
- 不同分类算法的优缺点是什么?
- 打开新页面的想法,代替window.open()有时会被浏览器阻拦的
- CDISC SDTM EG domain学习笔记
- PL/SQL
- windows平台下使用Github(3 使用github客户端方式 上传和下载 )