源码下载(免下载积分):下载

简述:测试Service使用的是ServiceTestCase,测试service的android 测试框架可以让service运行

在孤立的环境中,并提供了mock对象。当调用ServiceTestCase.startService()或者

ServiceTestCase.bindService()时,才会初始化测试环境,因此你可以在启动前,

设置自己的mock对象。

怎么设置mock Application和mock Context()呢?

设置mock Application通过setApplication()方法,设置mock Context通过setContext()方法

使用ServiceTestCase进行测试:

1. 继承ServiceTestCase
public class LocalServiceTest extends  ServiceTestCase<LocalService>{
2. 增加构造函数,
    public LocalServiceTest() {super(LocalService.class);/** ServiceTestCase 假设你将会使用mock context *或者mock Application对于测试环境,如果不提供*这些对象,当启动service时,ServiceTestcase会*使用它自己的内部的实例去注入到service中,*/setContext(new MockContext());setApplication(new MockApplication());}
3. 增加setUp()方法和setupService()(基本上此方法不需要覆盖)方法
    /*在每个测试方法之前执行,用于清除先前的测试,*和变量的初始化*/@Overrideprotected void setUp() throws Exception {// TODO Auto-generated method stubsuper.setUp();}/**在测试中创建Service并注入所有的依赖(context application)*当调用startService(Intent)或者bindService(Intent)时会自动 *调用这个方法,因此使用setContext()或者setApplication()注入 *依赖时,必须在这个方法之前*/@Overrideprotected void setupService() {// TODO Auto-generated method stubsuper.setupService();}
4. 测试Service是否能通过startService()来开启服务
//测试LocalService是否能够通过startService()来开启服务public void testLocalServiceStartable(){Intent startIntent = new Intent();startIntent.setClass(getContext(), LocalService.class);startService(startIntent);//返回在startService()或者bindService()或创建的serviceLocalService localService = getService();assertNotNull(localService);assertEquals(LocalService.class.getName(), localService.getClass().getName());}
5. 测试Service能否被绑定
    //验证LocalService能否被绑定public void testLocalServiceBindable(){Intent bindIntent = new Intent();bindIntent.setClass(getContext(), LocalService.class);IBinder service = bindService(bindIntent);//测试IBinder assertNotNull(service);}
6. 增加测试tearDown()测试方法(这个方法可以不覆盖)
//这个方法会调用shutdownService()关闭所有的service@Overrideprotected void tearDown() throws Exception {// TODO Auto-generated method stubsuper.tearDown();}}

这个例子没有先验的测试方法。


API中有一个service测试的开发者指导很不错,是这样说的:

     1. Lifecycle Support : Service的函数有特定的调用顺序,为了支持Service的生命周期

ServiceTestCase必须遵守下列协议:

  • setUp()方法会在每个测试方法之前调用,如果覆盖这个方法,必须 
    保证第一条语句是super.setUp()

  • 测试用例在测试方法中startService(Intent) or bindService(Intent) 
    后才会调用service的onCreate()方法来实例化service,因此在测试之前, 
    你有机会去调整测试框架和测试逻辑

  • 当测试方法调用ServiceTestCase.startService()orServiceTestCase.bindService() , 
    测试用例将会调用Service.onCreate(),然后调用Service.startService(Intent) or 
    Service.bindService(Intent, ServiceConnection, int),

  • 当测试方法都结束后,测试用例会调用tearDown()方法,这个方法会停止, 
    销毁service根据service的启动方式,你必须在最后一条语句调用super.tearDown()

2. Dependency Injection:service有两个固有的依赖关系,它的Contex和相关的Application,

ServiceTestCase框架允许注入替代的mock的相关的依赖,因此,

执行单元测试,是在一个孤立的环境控制来依赖关系的。

Service Test1相关推荐

  1. Cannot start service test1: b'endpoint with name test1 already exists in network ... docker 网络被占用

    docker网络基本知识 默认网络 # 查看网络 docker network ls bridge.none.host这 3 个网络包含在 Docker 实现中.运行一个容器时,可以使用 the –n ...

  2. ubuntu下tftp的安装、配置、使用

    1. 安装(注意权限,root下) $ apt-get install tftp-hpa tftpd-hpa   2. 建立目录 $ mkdir /tftpboot # 这是建立tftp传输目录. $ ...

  3. Oracle Study之--Oracle 11gR2通过RMAN克隆数据库

    Oracle Study之--Oracle 11gR2通过RMAN克隆数据库 Purpose of Database Duplication A duplicate database is usefu ...

  4. 构建简单的微服务架构

    前言 本篇仅作引导,内容较多,如果阅读不方便,可以使用电脑打开我们的文档官网进行阅读.如下图所示: 文档官网地址:docs.xin-lai.com 目录 总体介绍   微服务架构的好处    微服务架 ...

  5. 构建自己的简单微服务架构(开源)

    构建自己的简单微服务架构(开源) 原文:构建自己的简单微服务架构(开源) 前言 本篇仅作引导,内容较多,如果阅读不方便,可以使用电脑打开我们的文档官网进行阅读.如下图所示: 文档官网地址:https: ...

  6. Oracle 10g Data Guard

    下文出现的ora11 ora12是机器名,其上分别装有 相同版本的Linux,相同版本的ORACLE10g软件. ora11上的数据库test1,用dbca创建 ora12不用建库,只需按下面的步骤做 ...

  7. Java 中代码优化的 30 个小技巧(下)

    21 防止死循环 有些小伙伴看到这个标题,可能会感到有点意外,代码中不是应该避免死循环吗?为啥还是会产生死循环? 殊不知有些死循环是我们自己写的,例如下面这段代码: while(true) {if(c ...

  8. oracle 11g Data Guard物理备份库

    两台oracle未安装ARC,俺是小白,占时不会玩arc.ADB高手在于分享,俺小白将 下面是Data Guard 主备环境配置过程分享给大家.备份是物理Data Guard 一, 系统:centos ...

  9. JAVA中如何实现代码优化(技巧讲解)

    前言:今天叶秋学长跟大家谈谈优化这个话题,那么我们一起聊聊Java中如何实现代码优化这个问题,学长这里有几个实用的小技巧分享给大家,希望会对你们有所帮助. 博主传送门: 叶秋学长 推荐专栏: 秋招面试 ...

最新文章

  1. 35岁以前成功的12条黄金法则(1)
  2. 页面静态化2 --- 使用PHP缓存机制来完成页面静态化(上)(ob_flush和flush函数区别用法)...
  3. vmci.sys版本不正确_这样安装 Python 库才是最正确的哦
  4. 如何确定python开发环境已经配置好_搭建 python 开发环境 前面安装选位置我直接回车了现在我想测试查看目录该怎么办...
  5. 【测试】用例设计思路-六方面
  6. Nginx文档阅读笔记-Reverse Proxy vs. Load Balancer(反向代理与负载均衡)
  7. 微信小程序|开发实战篇之十二---order页面
  8. getmodifiers java_getModifiers()方法如何计算多个修饰符的值?
  9. 评论字数限制php,WordPress评论字数限制
  10. 一个学习PCI Express的 不错去处
  11. 华为手机备忘录的字体怎么调大?
  12. python爬取微信运动_用 Python 修改微信(支付宝)运动步数,轻松 TOP1
  13. Inpaint2021一款非常强大图片去水印神器
  14. 能上QQ无法打开网页
  15. GD32W515系列Wi-Fi MCU资料
  16. CSS——css外部样式文件的引入
  17. 你了解净水器滤芯知识多少?
  18. 计算机简史,硬件组成及基本原理
  19. Python实现Excel转JSON
  20. 人工智能导论实验——基于MindSpore的广告推荐

热门文章

  1. 【024】Vue+Springboot+mysql员工考勤管理系统(多角色登录、请假、打卡)(含源码、数据库、运行教程、实验报告)
  2. Delphi中的线程类--之(1)
  3. 用最少的代码渲染3D模型
  4. arcgis之地理配准
  5. 打印机的4种色彩输出方式
  6. 单片机可以用python编程吗,python可以单片机编程吗
  7. 本周大新闻|FDA公布XR认证医疗名单,索尼推数字孪生平台Mapray
  8. 【ACWing】1264. 动态求连续区间和
  9. Android中高级进阶开发面试题冲刺合集(四)
  10. HTML 写代码流星雨