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相关推荐

  1. WCF Testing Tool(转)

    原文:http://jayce.clearviewtickets.info/wcftestingtool.html best video: wcf testing tool IIS7 Admin Pa ...

  2. OCA读书笔记(6) - 配置Oracle网络环境

    6.Configuring the Oracle Network Environment su - grid 装grid时自动创建了监听 netca--创建新的监听 vi $ORACLE_HOME/n ...

  3. Android测试原理(二)

    2.3.  The Testing API(测试API) Android的测试API是基于JUnitAPI和扩展的instrumentation 框架以及特定的Android测试类.          ...

  4. 在fedora21 上的php+mysql+apache环境搭建

    2019独角兽企业重金招聘Python工程师标准>>> 转自:http://www.itzgeek.com/how-tos/linux/fedora-how-tos/install- ...

  5. CC攻击工具list

    从论文里抠出来的工具列表如下,后面有黑产的工具以及网络上摘录的工具: 分类:(1)有僵尸网络(是否代理服务器)&没有的==>(2)单一url&混合url(多线程,压测为主,dem ...

  6. fedora21 mysql_在fedora21 上的php+mysql+apache环境搭建

    参考资料: LAMP Stands for Linux,Apache,MySQL and PHP. Most of the websites works with the above combinat ...

  7. 面试总结之MISC(操作系统,网络,数学,软件开发,测试,工具,系统设计,算法)...

    操作系统 解释堆和栈的区别. 分配在堆的内存与分配在堆栈的内存有什么不同 分配在堆的内存要手动去释放 线程与进程的区别 多线程中栈与堆是公有的还是私有的 在多线程环境下,每个线程拥有一个栈和一个程序计 ...

  8. oracle诊断,Oracle 诊断事件列表

    Oracle 诊断事件列表 (2013-03-26 18:05:26) 标签: oracle 诊断事件 it ORA-10000: controlfile debug event, name 'con ...

  9. 杨波 微服务技术专家_专家称,这些是最有效的微服务测试策略

    杨波 微服务技术专家 by Jake Lumetta 杰克·卢米塔(Jake Lumetta) 专家称,这些是最有效的微服务测试策略 (These are the most effective mic ...

最新文章

  1. Android studio 使用心得(三)—从Eclipse迁移到Android studio
  2. linux c 内存操作函数 简介
  3. 成功解决absl.flags._exceptions.IllegalFlagValueError: flag --train_size=inf: Expect argument to be a str
  4. android跑步软件,手机跑步软件哪个好_安卓手机跑步记录软件_手机跑步app【最新】-太平洋电脑网...
  5. 太原警方通过微博提醒您手机丢失如何保微信安全
  6. mes选型与实施指南_六大类型MES企业大盘点告诉你如何选择正确选择MES
  7. 用JAVA写一个视频播放器
  8. axure 8.1 授权码分享
  9. 广告学计算机平面设计(1)形考5,(更新版)国家开放大学电大专科《计算机平面设计(2)》网络课形考任务1-5答案.doc...
  10. 为谷歌浏览器Chrome创建多个用户
  11. 中职学校计算机技能大赛总结,中职学校技能大赛总结
  12. 在ios6中调用苹果地图用于导航 (地图开发)
  13. 强大的第三方视频播放器。
  14. Myeclipse 使用经验总结
  15. 微信小程序集合3(百度小说+电商+仿哗哩哗哩小视频+码绘本跟读+科学计算器+身份证查询+天气+投资理财微+外卖+在线音乐排行)
  16. Asp.net WebApi跨域_se7en3_新浪博客
  17. 电子商务系统怎么开发,有哪些流程_OctShop
  18. Shell 8种字符串截取方法
  19. HRBUST1310 火影忍者之~鸣人
  20. ST120G坏道恢复案例

热门文章

  1. 爬虫数据持久化存储——写入文件
  2. 增长预测模型之逻辑斯蒂模型
  3. go每日新闻--2021-01-03
  4. 那些年你追过的女孩——颜值到底有几分???
  5. 一学就会的无代码RPA,让“高效”成为你的竞争优势
  6. ios时间戳和日期的一些转换,如具体时间,年龄,星座等等
  7. 微信小程序:自定义弹出层
  8. 开源的WebVR直播播放器
  9. 重学Java(007)—— Java基础知识(方法的练习,三个小例子、总结方法的注意事项)
  10. APISpace 天气预报查询API