Service Testing
ServiceTestCase相关
1 Service Testing(服务测试)
Android 系统提供了一个可以独立测试Service并给service提供可注入模拟对象的框架类—ServiceTestCase。
这里所谓的独立就是指被测的Service 可以不依附于它所在的应用。例如我们可以模拟某个Service 的运行环境等。
由于Service 是在后台运行的,所以测试Service不能用instrumentation 框架。这篇文档描述了怎样测试Service。
2 Service Design and Testing
当你设计一个Service 的时候, 你就应该考虑你应该怎样验证Service 各种生命周期的状态. onCreate() 和onStartCommand()方法可以启动一个Service ,但是android没有设置一个全局的变量表明他们是否启动成功。因此当我们测试Serivice 的时候(测试Service 是否能够正常被启动),也许我们就需要这样的一个变量。
ServiceTestCase提供了很多方法可以帮助我们更好的测试。例如, getService ()方法返回被测试的Serivce 的引用(文档中是handle, 句柄)。这样我们就可以利用返回的引用去确认被测试Service的各种运行状态。
3 ServiceTestCase
ServiceTestCase 继承于Junit 框架中的TestCase.该类中包含有测试 应用的许可,控制被测试的应用和Service 等大量方法。同时也提供了模拟的应用和上下文(Context)方便我们可以使Service 对立于系统进行测试。
ServiceTestcase不会初始化测试环境直到你调用ServiceTestCase.startService()或者ServiceTestCase.bindService. 这样的话,你就可以在Service 启动之前可以设置测试环境,创建你需要模拟的对象等等。
需要注意的是ServiceTestCase .bindService() 方法和Service.bindService()方法的参数不同的。ServiceTestCase.bindService() 方法只提供了以个intent对象。返回值方面ServiceTestCase.bindService()方法返回的是一个IBinder对象的子类, 而Service.bindService ()返回的是布尔值。
Service TestCase.setUp()方法在每个测试用例调用之前执行,该方法执行的时候配置测试数据通过复制并获得当前系统提供的Context. 你可以通过getSystemContext()取得系统的当前Context. 如果你重写setUp()方法的话,第一条语句应该是super.setUp();
setApplication()方法和setContext(Context)方法允许你在Service启动之前设置模拟的Context 和模拟的Application.关于这些模拟的对象。请参考相关文档。
ServiceTestCase 默认的执行testAndroidTestCaseSetupProperly()方法。用于验证该测试类是否在跑其他测试用例之前成功地设置了上下文。
4 Mock object classes
ServiceTestCase 默认情况下认为你会使用模拟的上下文对象(Context)或者Application生成测试环境。这些模拟的对象使该环境独立与其他的系统.(能理解为减少耦合性吗) 一旦你在被测试Service启动之前不为该其提供模拟的对象实例,ServiceTestCase会自动创建它内部提供的实例并将他们注入Service.
为被测试的Service 注入一个模拟的Application ,首先需要继承MockApplication. 该类 是Application d的一个子类。在该类
(MockApplication)中的所有的方法都跑出异常。为了有效地利用该类我们必须继承该类,并重写我们需要的方法。然后通过setApplication() 方法注入到Service 中。该模拟的对象允许你控制被测试Service可以看到的应用程序对象,并且使它对立与其他的系统。In addition, any hidden dependencies your Service has on its application reveal themselves as exceptions when you run the test. 你可以向被测试的Service 通过setContext()方法注入模拟的context.
5 what to test
下面关于android Service 测试列出了一些建议 :
• 验证Context.StartService()方法和Context.bindService() 方法调用后,onCreate() 方法是否被正确调用了。同样, 你需要确认在Context.StopService(),Cotext.unbindService(),stopSelf(),或者stopSelfResult()调用后onDestory()方法是否被正确调用。
• 服务能够正确地处理Context.startService()的多次调用,只有第一次调用才会触发Service.onCreate()方法,但是每次都会调用Service.onStartCommand()方法。还要注意的是startService()不会嵌套调用,因此对Context.stopService()或者 Service.stopSelf() ( stopSelf(int)不再此列)的一次调用就应该能够终止服务。
• 测试服务在逻辑上的正确性
ServiceTestCase 方法说明
getApplication() :返回被测试的Service所用的Application.
getSystemContext():返回在setUp()方法中被保存的真的系统Context.
setApplication (Applicaition application) 设置测试被测试Service 所用的Application.
setUp() :得到当前系统的上下文并存储它。若要重写该方法的话,第一句必须是
super.setUp(). 该方法在每个测试方法被执行前都执行一遍。
setupService():生成被测试的Service , 并向其中注入模拟的组件(Appliocation ,Context)。
该方法会被StartService(Intent )或者bindService(Intent)自动调用。
shutdownService(): 调用相应的方法停止或者解除Service,然后调用ondestory().
通常该方法会被teardown()方法调用。
startService(Intent intent): 启动被测试的Service.如果用这个方法启动一个服务,那么
该服务在最后回自动被teardown()方法关掉。
tearDown():关闭被测试的服务, 确认在执行下个用例前所有的资源被释放,所以的
垃圾被回收。 这个方法在每个方法执行完后调用。重写该方法上的话, 必须将
super.tearDown()作为最后一条语句。
Service Testing相关推荐
- WCF Testing Tool(转)
原文:http://jayce.clearviewtickets.info/wcftestingtool.html best video: wcf testing tool IIS7 Admin Pa ...
- OCA读书笔记(6) - 配置Oracle网络环境
6.Configuring the Oracle Network Environment su - grid 装grid时自动创建了监听 netca--创建新的监听 vi $ORACLE_HOME/n ...
- Android测试原理(二)
2.3. The Testing API(测试API) Android的测试API是基于JUnitAPI和扩展的instrumentation 框架以及特定的Android测试类. ...
- 在fedora21 上的php+mysql+apache环境搭建
2019独角兽企业重金招聘Python工程师标准>>> 转自:http://www.itzgeek.com/how-tos/linux/fedora-how-tos/install- ...
- CC攻击工具list
从论文里抠出来的工具列表如下,后面有黑产的工具以及网络上摘录的工具: 分类:(1)有僵尸网络(是否代理服务器)&没有的==>(2)单一url&混合url(多线程,压测为主,dem ...
- fedora21 mysql_在fedora21 上的php+mysql+apache环境搭建
参考资料: LAMP Stands for Linux,Apache,MySQL and PHP. Most of the websites works with the above combinat ...
- 面试总结之MISC(操作系统,网络,数学,软件开发,测试,工具,系统设计,算法)...
操作系统 解释堆和栈的区别. 分配在堆的内存与分配在堆栈的内存有什么不同 分配在堆的内存要手动去释放 线程与进程的区别 多线程中栈与堆是公有的还是私有的 在多线程环境下,每个线程拥有一个栈和一个程序计 ...
- oracle诊断,Oracle 诊断事件列表
Oracle 诊断事件列表 (2013-03-26 18:05:26) 标签: oracle 诊断事件 it ORA-10000: controlfile debug event, name 'con ...
- 杨波 微服务技术专家_专家称,这些是最有效的微服务测试策略
杨波 微服务技术专家 by Jake Lumetta 杰克·卢米塔(Jake Lumetta) 专家称,这些是最有效的微服务测试策略 (These are the most effective mic ...
最新文章
- Android studio 使用心得(三)—从Eclipse迁移到Android studio
- linux c 内存操作函数 简介
- 成功解决absl.flags._exceptions.IllegalFlagValueError: flag --train_size=inf: Expect argument to be a str
- android跑步软件,手机跑步软件哪个好_安卓手机跑步记录软件_手机跑步app【最新】-太平洋电脑网...
- 太原警方通过微博提醒您手机丢失如何保微信安全
- mes选型与实施指南_六大类型MES企业大盘点告诉你如何选择正确选择MES
- 用JAVA写一个视频播放器
- axure 8.1 授权码分享
- 广告学计算机平面设计(1)形考5,(更新版)国家开放大学电大专科《计算机平面设计(2)》网络课形考任务1-5答案.doc...
- 为谷歌浏览器Chrome创建多个用户
- 中职学校计算机技能大赛总结,中职学校技能大赛总结
- 在ios6中调用苹果地图用于导航 (地图开发)
- 强大的第三方视频播放器。
- Myeclipse 使用经验总结
- 微信小程序集合3(百度小说+电商+仿哗哩哗哩小视频+码绘本跟读+科学计算器+身份证查询+天气+投资理财微+外卖+在线音乐排行)
- Asp.net WebApi跨域_se7en3_新浪博客
- 电子商务系统怎么开发,有哪些流程_OctShop
- Shell 8种字符串截取方法
- HRBUST1310 火影忍者之~鸣人
- ST120G坏道恢复案例