【转】ContentProvider中文介绍

ContentProvider测试

ContentProvider是Android API的一个重要部分,它存贮和检索数据,使得数据可以跨应用程序访问。作为一个应用程序开发者,你可以提供自己的公共prividers给其他应用程序使用。如果你这样做了,那你应该使用你发布的API来测试他们。

该文档描述了如何测试公共的ContentProvider,但是也同样适用于应用程序私有的providers。如果你不熟悉ContentProvider或者Android测试框架,请先阅读ContentProvider和测试基本原理的介绍。

ContentProvider设计和测试

在Android中,ContentProvider是作为提供数据表的数据API来使得内部的数据数据外部可见的。ContentProvider可能有许多公共常量,但是他通常仅有少数几个公共方法并且没有公共变量。所以你应该只基于provider的公共方法 来编写测试。ContentProvider被设计成就像是在自己和自己的用户之间提供一种约定。

ProviderTestCase2是ContentProvider的基础测试用例类,允许你在一个独立的环境中测试你的ContentProvider。Android虚拟对象如IsolateContext和MockContentResolver也帮助提供一个独立的测试环境。

与其他android测试一样,provider测试包运行在InstrumentationTestRunner测试运行系的控制下。“用InstrumentationTestRunner运行测试”部分详细描述了测试运行器。

ContentProvider测试API

ContentProvider测试API主要提供一个独立的测试环境。这样就确保测试不依赖于数据,同时避免测试修改实际用户数据。例如,你想避免由于前一个测试删除了所有数据而是测试失败,或者你想避免在一个实际的provider中添加加或删除通讯录信息。

下面为provider提供的这个测试用例类和虚拟对象类为你建立一个独立的测试环境。

ProviderTestCase2

你用ProviderTestCase2的一个子类来测试ContentProvider。这个基础类是对AndroidTestCase的扩展,所以他提供了JUnit测试框架,同时提供了Android特有的方法来测试应用程序权限。该类最重要的特性是他的初始化,创建了一个独立的测试环境。

ProviderTestCase2在构造方法里完成初始化,继承它的子类应该在自己的构造方法里调用父类的构造方法。ProviderTestCase2构造方法创建了一个IsolatedContext对象,该对象允许文件和数据库操作,但是其他的交互交由Android系统。文件和数据库操作发生在设备或模拟器的一个目录里并且有一个特殊的前缀。

构造方法接下来创建一个MockContentResolver对象作为测试的resolver来使用。MockContentResolver类在“虚拟对象类”部分做了详细描述。

最后,构造方法创建一个要测试的Provider的实例。这是一个标准的ContentProvider对象,但是使用的是IsolatedContext的环境信息,所以它受到所在的独立测试环境的限制。左右测试用例类里的测试都依靠这个独立对象运行。

虚拟对象类

ProviderTestCase2使用IsolatedContex和MockContentResolver这两个标准的虚拟对象类。了解更多请看测试基本原理。

测试什么

测试什么主题列举了测试Android组件通常要考虑的方面。这里是一些针对测试ContentProvider的指导:

l  用resolver方法测试:虽然你可以在ProviderTestCase2中实例化一个provider对象,但是你应该总是使用合适的URI通过resolver对象来进行测试。这样确保了你的测试跟正规的应用程序使用同样的方式来使用provider。

l  作为契约测试公共provider:如果你想让你的provider成功公共的并被其他应用程序使用,你应该作为合同测试他。这包含以下概念:

l  用你的provider暴露的常量测试。例如寻找引用provider数据表中列明的常量。这些应该总是被provider定义为公共常量。

l  测试所有provider提供的的URI。你的provider可能提供了几个URI,每个URI指向数据的不同方面。例如,NotePad例子中,provider提供一个URI来检索notes列表,另一个URI通过数据库ID来检索单独的note,还有一个URI用来显示文件夹里的notes。

l  测试无效的URI:你的单元测试应该故意通过一个无效的URI来调用provider,并查看错误。好的provider设计会抛出一个非法参数异常。

l  测试标准的provider交互:大部分provider提供六个访问方法:query、insert、delete、update、getType和onCreate()。你的测试应该验证所有这些方法都正确工作。在“ContentProvider”主题中有详细描述。

l  测试业务逻辑:别忘了测试provider执行的业务逻辑。业务逻辑包括处理非法值、算术运算、副本的消除与合并等等。ContentProvider不一定有业务逻辑,因为他可能通过acivity修改数据来实现了。如果provider实现了业务逻辑你就应该测试他

时间: 2024-10-11 18:07:16

【转】ContentProvider中文介绍的相关文章

【Java】Appache Flume 中文介绍

 Flume 是什么        Apache Flume是一个高可靠.高可用的分布式的海量日志收集.聚合.传输系统.它可以从不同的日志源采集数据并集中存储. Flume也算是Hadoop生态系统的一部分,源于Cloudera,目前是Apache基金会的顶级项目之一.Flume有两条产品线,0.9.x版本和1.x版本. 官网:http://flume.appache.org/ 收集.聚合事件流数据的分布式框架 通常用于log数据 采用ad-hoc方案,明显优点如下: 可靠的.可伸缩.可管理

[Arduino] Leonardo 中文介绍

以下内容均翻译自arduino.cc,水平有限,如有错误请大家指正. 概述Arduino Leonardo是基于ATmega32u4一个微控制器板.它有20个数字输入/输出引脚(其中7个可用于PWM输出.12个可用于模拟输入),一个 16 MHz的晶体振荡器,一个Micro USB接口,一个DC接口,一个ICSP接口,一个复位按钮.它包含了支持微控制器所需的一切,你可以简单地通过把它连接到计算机的USB接口,或者使用 AC-DC适配器,再或者用电池来驱动它.Leonardo不同于之前所有的ard

ContentProvider简单介绍

1.什么是ContentProvider 数据库在Android其中是私有的,当然这些数据包含文件数据和数据库数据以及一些其它类型的数据. 不能将数据库设为WORLD_READABLE,每一个数据库都仅仅能创建它的包訪问, 这意味着仅仅有由创建数据库的进程可訪问它.假设须要在进程间传递数据, 则能够使用AIDL/Binder或创建一个ContentProvider,可是不能跨越进程/包边界直接来使用数据库. 一个Content Provider类实现了一组标准的方法接口,从而可以让其它的应用保存

Android ContentProvider的介绍

一.ContentProvider的概念 ContentProvider:为存储和获取数据提供统一的接口.可以在不同的应用程序之间共享数据.Android已经为常见的一些数据提供了默认的ContentProvider 1.ContentProvider使用表的形式来组织数据 无论数据的来源是什么,ContentProvider都会认为是一种表,然后把数据组织成表格 2.ContentProvider提供的方法 query:查询 insert:插入 update:更新 delete:删除 getT

PHP爬虫最全总结2-phpQuery,PHPcrawer,snoopy框架中文介绍

1.几种常用的PHP爬虫框架对比 原文链接:https://blog.csdn.net/future_todo/article/details/52804440 1.1 phpQuery 优势:类似jquery的强大搜索DOM的能力. pq()是一个功能强大的搜索DOM的方法,跟jQuery的$()如出一辙,jQuery的选择器基本上都能使用在phpQuery上,只要把"."变成"->",Demo如下(对应我的github的Demo5) <?php re

iOS 天气应用代码中文介绍,ios代码

天气应用 解释请求参数 q: 表示Location(可以给出城市名字;或者直接给城市的经纬度) 例子:q=beijing 例子 q=48.834,2.394 num_of_days: 需要预报的天数 例子:num_of_days=2 tp: 每隔几小时的天气预报 例子:tp=1; tp=3(缺省); tp=6; tp=12; tp=24 key: 注册成功后的钥匙 例子: key=61dcb484acc1f6cfb08aad9c4ac3d939 format: 返回的数据格式 例子:format

[Arduino] Arduino Uno R3 中文介绍

Arduino UNO是Arduino USB接口系列的最新版本,作为Arduino平台的参考标准模板.UNO的处理器核心是ATmega328,同时具有14路数字输入/输出口(其中6路可作为PWM输出),6路模拟输入,一个16MHz晶体振荡器,一个USB口,一个电源插座,一个ICSP header和一个复位按钮.UNO已经发布到第三版,与前两版相比有以下新的特点: 在AREF处增加了两个管脚SDA和SCL,支持I2C接口:增加IOREF和一个预留管脚,将来扩展板将能兼容5V和3.3V核心板. 改

MooTools中文介绍

MooTools是一个简洁,模块化,面向对象的JavaScript框架.它能够帮助你更快,更简单地编写可扩展和兼容性强的JavaScript代码. Mootools从Prototype.js中汲取了许多有益的设计理念,语法也和其极其类似.但它提供的功能要比Prototype.js多,整体设计也比Prototype.js要相对完善,功能更强大,比如增加了动画特效.拖放操作等等.www.82676666.com 总之,Mootools是一个非常优秀的Javascript框架,更多精髓部分等待你去发掘

SwiftyJSON 中文介绍

SwiftyJSON makes it easy to deal with JSON data in Swift. Why is the typical JSON handling in Swift NOT good Requirements Integration Usage Initialization Subscript Loop Error Optional getter Non-optional getter Setter Raw object Literal convertibles