10、测试你的 Content Provider
2017-12-21 00:19
211 查看
测试你的 Content Provider
如果您正在实现一个 content provider 来存储和获取数据或者使数据可以被其他应用访问,你应该测试你的 provider 来确保他不以意外的方式运行。这个课程描述了如何测试公共的 content providers,同样也适用于对自己应用保持私有的 providers。创建 Content Providers 集成测试
在 Android 中,应用程序将 content providers 视为提供数据表的数据 APIs,并且其内部从视图中隐藏。一个 content provider 可能有很多公共的常量,但是如果公共方法没有公共变量,他通常很少。因为这个原因,你应该仅仅基于 provider 的公共成员编写测试。这样设计的 content provider 在其自身和用户之间提供一个契约。Content providers 允许您访问实际的用户数据,因此确保您在独立的测试环境中测试您的 content provider 是非常重要的。这种方法仅允许在测试用例中明确设置的数据依赖项上运行。这同样意味着你的测试不能修改实际的用户数据。例如你应该避免编写失败的测试,因为之前的测试会遗留数据。童颜的,你的测试应该避免添加或者删除 provider 中实际的联系信息。
要想独立的测试你的 contnet provider,请使用 ProviderTestCase2 类。这个类允许你使用 Android mock 对象例如 IsolatedContext 和 MockContentResolver 来访问文件和数据库信息,而不会影响实际的用户数据。
你的集成测试应该被作为一个 JUnit 4 测试类编写。想要了解更多关于创建 JUnit 4 测试类和使用 JUnit 4 assertions,请看 创建一个本地的单元测试类。
要为您的 content provider 创建一个集成测试,你必须执行这些步骤:
创建你的作为 ProviderTestCase2 的子类的测试类。
在你的测试类定义的开头添加 @RunWith(AndroidJUnit4class) 注解。
确认 Android 测试支持库提供的 AndroidJUnitRunner 类是你默认的测试运行器。测试入门 描述了更多关于这个步骤的内容。
从 InstrumentationRegistry 类中设置 Context 对象。请看下面的示例代码片段:
@Override protected void setUp() throws Exception { super.setUp(); setContext(InstrumentationRegistry.getTargetContext()); }
ProviderTestCase2 是如何工作的
你使用 ProviderTestCase2 的子类测试 provider。这个类继承自 AndroidTestCase,因此他提供了 JUnit 测试框架和用于测试应用权限的 Android 的指定方法。这个类最重要的特性是他的初始化,他创建了一个独立的测试环境。初始化在 ProviderTestCase2 的构造函数中完成,
子类在他们自己的构造函数中调用。ProviderTestCase2 构造函数创建了一个 IsolatedContext 对象,它允许文件盒数据库操作,但是存在于 Android 系统的其他交互。文件和数据库操作本身发生在设备或者模拟器中本地的目录中,并且有一个特殊的前缀。
然后构造器创建了一个 MockContentResolver 作为测试的 resolver。
最后,构造器创建了一个被测试的 provider 的实例。这是一个普通的 ContentProvider 对象,但是它从 IsolatedContext 中获取所有的环境信息,因此他被限制在独立的测试环境中运行。所有在测试用例中完成的测试都是针对这个独立的对象运行的。
运行这个 content providers 的集成测试和 instrumented 单元测试的方式是相同的。要想运行你的 content provider 的集成测试,请按照 运行 Instrumented 单元测试 中描述的步骤。
要测试什么
下面是对测试 content providers 的一些具体的指导原则。用 resolver 方法测试:尽管你可以在 ProviderTestCase2 中实例化一个 provider 对象,但是你应该总是使用合适的 URI 来测试 resolver 对象。这样做事确保你通过执行与常规应用程序使用的相同交互来测试 provider 。
测试一个公共的 provider 作为一个 contract :如果你打算将你的 provider 对其他应用程序公开并可用,你应该测试他作为一个 contract 。关于如何做到这一点的一些例子如下:
使用 provider 公开暴露的常量进行测试。例如,查找一个引用 provider 数据表命名列的一个常量。这些应该总是由 provider 公开定义。
测试你的 provider 提供的所有的 URIs. 你的 provider 可能会提供一些 URIs,每一个都指的数据的不同方面。
测试无效的 URIs :你的单元测试应该故意的使用一个无效的 URI 调用 provider,然后查找错误。一个优秀的 provider 对无效的 URIs 将会抛出 IllegalArgumentException 异常。
测试标准的 provider 交互:大多数的 providers 提供了六个访问方法:query( ) , insert( ) , delete( ) , update( ) , getType( ) , 和 onCreate( ) 。你的测试应该验证所有这些方法的松祚。这些方法在 Content Providers 里面有更多的细节的描述。
测试业务逻辑:如果你的 content provider 实现了业务逻辑,你应该测试它。业务逻辑包括处理无效的数据,财务或者算术的计算,消除或者重复的合并。
相关文章推荐
- 用于 APP 测试的 10 大 Android 设备
- 10 款免费的在线网站测试工具
- 配置SSD-caffe测试时出现“Check failed: error == cudaSuccess (10 vs. 0) invalid device ordinal”解决
- PHP自动测试框架Top 10
- Maven学习10之测试的几个注意事项
- caffe学习系列(10):如何测试caffe训练出来的模型
- 测试人员必知必会的SQL知识10
- 研究生课程 软件测试10: 兼容性测试
- 小白日记10:kali渗透测试之端口扫描-UDP、TCP、僵尸扫描、隐蔽扫描
- Windows Caffe 学习笔记(一)训练和测试CIFAR-10数据集
- p1-10: 测试 转义字符
- 基础算法测试——生成一个1-10之间的随机整数组合
- C# IFELanguage接口获取拼音,支持多音字,音调 win10/8.1/7测试通过
- 熊猫猪新系统测试之一:Windows 10 技术预览版
- 测试自动化--学到的10课(血泪史)
- 10-24机房测试
- 10 个开源压力测试工具
- 盘点前 10 名的免费跨浏览器测试工具
- Pytorch打怪路(一)pytorch进行CIFAR-10分类(5)测试
- iOS 10 升级后无法真机测试 Could not find Developer Disk Image