如果你的应用中使用了Content Provider来与其他应用进行数据交互,你需要对Content Provider进行测试来确保正常工作。

创建Content Provider整合测试

在Android中,app将Content Provider视为数据API。一个Content Provider可能会有public 常量。

Content Provider允许你访问真实的用户数据,所以必须在一个隔离的测试环境中来测试你的Content Provider。这就意味着你的测试不会更改真实的用户数据。

在隔离状态下测试Content Provider,需要使用ProviderTestCase2类。这个类允许你使用Android虚拟对象类比如IsolatedContext和MockContentResolver来在不影响真实用户数据的情况下访问文件和数据库信息。

你的整合测试类需要写为Junit4测试类风格。

为了创建Content Provider整合测试类,你需要执行如下几步:

1、 创建ProviderTestCase2的测试子类。

2、 添加 @RunWith(AndroidJUnit4.class) 注解到测试类开始的地方。

3、 声明AndroidJUnitRunner类

4、 设置Context

代码如下:

@Override
protected void setUp() throws Exception {
setContext(InstrumentationRegistry.getTargetContext());
super.setUp();
}

ProviderTestCase2如何工作

你通过ProviderTestCase2的子类来对Content Provider进行测试。这个基类扩展自AndroidTestCase,所以它提供了Junit 测试框架和Android特有的测试应用的方法。最重要的特性就是这个类的初始化创建了一个隔离的测试环境。

初始化在ProviderTestCase2的构造函数中完成,并且在子类的构造函数中调用。ProviderTestCase2构造函数创建一个IsolatedContext对象允许你访问文件和数据库操作,但是与Android系统隔离。

构造函数创建一个MockContentResolver来作为测试的resolver。

最后,构造函数在测试状态下创建一个Content Provider的实例。这是一个正常的Content Provider对象。但是所有的环境信息都是来时IsolatedContext中。所以你的测试工作严格的限制在一个隔离的测试环境中。

测试什么

1、 测试resolver方法

2、 测试你的Content Provider暴露的常量;测试你的Content Provider提供的URI;测试URI的有效性。

3、 测试Content Provider标准的交互。

4、 测试你的商业逻辑。

本文作者:宋志辉

个人微博:点击进入

6、Android Content Provider测试的更多相关文章

  1. Android Content Provider Guides

    Android Content Provider Guides Content Providers管理对结构化数据集的访问.它们包装数据,并且提供一种定义数据安全的机制. Content provid ...

  2. Android Content Provider基础

    Android Content Provider基础 Content Providers Content providers管理对一个结构化的数据集合的访问.它们封装了数据,并且提供了保护数据安全性的 ...

  3. [典型漏洞分享]exported Android content provider引发的隐私泄露问题

    YS android手机APP对外开放多余的content provider,可任意增.删.改和查images数据库表格,导致隐私泄露 问题描述: YS android手机APP使用SQLITE数据库 ...

  4. (转载)Android content provider基础与使用

    android有一个独特之处就是,数据库只能被它的创建者所使用,其他的应用是不能访问到的,所以如果你想实现不同应用之间的数据共享,就不得不用content provider了.在Android中,co ...

  5. Android Content Provider简介

    Content Provider是Android的四大组件之一,与Activity和Service相同,使用之前需要注册: Android系统中存在大量的应用,当不同的应用程序之间需要共享数据时,可以 ...

  6. Android Content Provider的启动过程源码分析

    本文參考Android应用程序组件Content Provider的启动过程源码分析http://blog.csdn.net/luoshengyang/article/details/6963418和 ...

  7. [Android] Content provider, ContentResolver

    Content provider的作用: Content providers manage access to a structured set of data. They encapsulate t ...

  8. Android Content Provider Security(转)

    四大组件之一-content provider安全详解 原帖地址:http://drops.wooyun.org/tips/4314 0x00 科普 内容提供器用来存放和获取数据并使这些数据可以被所有 ...

  9. android Content Provider介绍

    ContentProvider(内容提供者)是Android中的四大组件之一.主要用于对外共享数据,也就是通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过Conte ...

随机推荐

  1. ●BZOJ 3998 [TJOI2015]弦论

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3998题解: 后缀自动机. 当T=0时, 由于在后缀自动机上沿着trans转移,每个串都是互不 ...

  2. C++Primer学习——未定义行为

    定义: 主要是求值顺序的问题 int i = f1() + f2();          //我们无法知道是f1 还是 f2先被调用 而且求值顺序和优先级和结合律无关,比如: f() + g()*h( ...

  3. bzoj3126[Usaco2013 Open]Photo 单调队列优化dp

    3126: [Usaco2013 Open]Photo Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 374  Solved: 188[Submit] ...

  4. 常用SQL Server命令(持续) | Commonly used SQL Server command list (Cont')

    ---------------------------------------------------- 1. 查看某数据库中某表详细信息 SP_HELP USE DB_NAME GO SP_HELP ...

  5. matplotlib中subplot的各参数的作用

    subplot(a,b,c)中a代表所画图形的行数 b代表所画图形的列数 c代表所画图形的序号. plt.figure(facecolor='w', figsize=(9, 10)) plt.subp ...

  6. 数据权限管理中心 - 基于mybatis拦截器实现

    数据权限管理中心 由于公司大部分项目都是使用mybatis,也是使用mybatis的拦截器进行分页处理,所以技术上也直接选择从拦截器入手 需求场景 第一种场景:行级数据处理 原sql: select ...

  7. 谷歌发布 TensorFlow Lite [官方网站,文档]

    机器学习社区:http://tensorflow123.com/ 简介 TensorFlow Lite TensorFlow Lite 是 TensorFlow 针对移动和嵌入式设备的轻量级解决方案. ...

  8. JavaScript数据结构和算法----栈

    前言 栈是一种遵循后进先出(LIFO)原则的有序集合,新添加的或待删除的元素都保存在栈的末尾,称作栈顶,另外一端就叫栈底.在栈里,新元素都靠近栈顶,旧元素都接近栈底.可以想象桌上的一叠书,或者厨房里的 ...

  9. FJUT第四周寒假作业[JL]最后的晚餐(动态规划)

    题目来源:http://210.34.193.66:8080/vj/Contest.jsp?cid=163#P4 [JL]最后的晚餐 TimeLimit:1000MS  MemoryLimit:100 ...

  10. 利用Filter和拦截器,将用户信息动态传入Request方法

    前言: 在开发当中,经常会验证用户登录状态和获取用户信息.如果每次都手动调用用户信息查询接口,会非常的繁琐,而且代码冗余.为了提高开发效率,因此就有了今天这篇文章. 思路: 用户请求我们的方法会携带一 ...