Android测试简介
I. 测试与基本规范
1. 为什么需要测试?
为了稳定性,能够明确的了解是否正确的完成开发。
更加易于维护,能够在修改代码后保证功能不被破坏。
集成一些工具,规范开发规范,使得代码更加稳定( 如通过 phabricator differential 发diff时提交需要执行的单元测试,在开发流程上就可以保证远端代码的稳定性)。
2. 测什么?
一般单元测试:
列出想要测试覆盖的异常情况,进行验证。
性能测试。
模拟测试: 根据需求,测试用户真正在使用过程中,界面的反馈与显示以及一些依赖系统架构的组件的应用测试。
3. 需要注意
考虑可读性,对于方法名使用表达能力强的方法名,对于测试范式可以考虑使用一种规范, 如 RSpec-style。方法名可以采用一种格式,如: [测试的方法]_[测试的条件]_[符合预期的结果]。
不要使用逻辑流关键字(If/else、for、do/while、switch/case),在一个测试方法中,如果需要有这些,拆分到单独的每个测试方法里。
测试真正需要测试的内容,需要覆盖的情况,一般情况只考虑验证输出(如某操作后,显示什么,值是什么)。
考虑耗时,Android Studio默认会输出耗时。
不需要考虑测试private的方法,将private方法当做黑盒内部组件,测试对其引用的public方法即可;不考虑测试琐碎的代码,如getter或者setter。
每个单元测试方法,应没有先后顺序;尽可能的解耦对于不同的测试方法,不应该存在Test A与Test B存在时序性的情况。
4. 创建测试
选择对应的类
将光标停留在类名上
按下ALT + ENTER
在弹出的弹窗中选择Create Test
II. Android Studio中的单元测试与模拟测试
control + shift + R (Android Studio 默认执行单元测试快捷键)。
1. 本地单元测试
直接在开发机上面进行运行测试。
在没有依赖或者仅仅只需要简单的Android库依赖的情况下,有限考虑使用该类单元测试。
./gradlew check
代码存储
如果是对应不同的flavor或者是build type,直接在test后面加上对应后缀(如对应名为myFlavor的单元测试代码,应该放在src/testMyFlavor/java下面)。
src/test/java
Google官方推荐引用
dependencies {
// Required -- JUnit 4 framework,用于单元测试,google官方推荐
testCompile 'junit:junit:4.12'
// Optional -- Mockito framework,用于模拟架构,google官方推荐
testCompile 'org.mockito:mockito-core:1.10.19'
}
2. 模拟测试
需要运行在Android设备或者虚拟机上的测试。
主要用于测试: 单元(Android SDK层引用关系的相关的单元测试)、UI、应用组件集成测试(Service、Content Provider等)。