测试流程
测试作为开发重要的一环,其中包含有简单的迭代流程
- UI 测试迭代
要运行app, 必须进过UI测试,从UI测试失败-> UI 测试成功-> 重构的过程,失败与成功中间含有单元测试
- 单元测试
单元测试就是对基本的逻辑进行测试,迭代循环(单元测试失败->单元测试成功->重构)
测试金字塔
从基础到高级,规模也是从小到大递增
- 单元测试
- 集成测试
- UI测试
优缺点:
小测试:虽然快,但是当遇见大型项目时,让人困惑这是否还管用
大型测试: 慢而且复杂,但是对于大型项目这是必须的,
测试时,注意用到的比例:小测试70,中测试20,大测试10
小测试
- Robolectric
他很好地支持android设备,具体如下
- android 4.1以上
- gradle 2.4及上
- 主件周期
- 事件循环
- 所有的资源
- mockit
这也是单元测试框架,它可以模拟android框架,具体还没有看清楚,到用时再说清楚吧‘
- 仪器化单元测试
你也可以在真机或模拟器上使用仪器化测试,它并不会涉及任何框架的模拟或残桩,因为这种类型的测试的执行时间,明显比本地的单元测试时间慢,只有在评估app运行在真机上的性能时才会采用
中型测试
当在开发环境测试完单元测试时,你可能会改变组件在模拟器或真机上的行为,中级测试允许你完成开发过程的这部分工作。如果你的某些组件很依赖于真机环境,这部分工作是非常重要的。
中级测试评估多个单元测试,但是他并不测试整个app,比如中级测试包括服务测试,集成测试,密封UI测试来模拟外部依赖的行为
通常,你最好在模拟器或是Firebase Test Lab来测试你的app,而不是真机上,主要是你可以测试不同设备的表现,简单而快速
大型测试
尽管在app内单独进行每一层级和特性进行测试是很重要的,就像测试包含完整的栈,从UI到数据层的工作流和用例一样重要,
如果你的app规模很小,你只需要一个大型测试就可以评估你的app整个功能,否者,你还是得将测试分了,团队所有权,垂直功能,用户目标
- AndroidJUnitRunner
它帮助加载包和app到设备上,运行你的测试,报告你的结构
- JUnit Rules
可以启动activity 或是service
Espresso
有如下功能:
- 对view执行动作
- 通过app的流程边界-26以上
- 评估用户是怎么使用你的app的
- 定位或者激活with RecyclerView,AdpterView
- 使外部intent有效
- 改变Web的DOM结构
- 跟踪长时间在后台运行的操作
UI Automator
检测当前展示UI,截屏,分析设备当前状态,等,但是由于很依赖于android版本,所以不是必须的话,不用太在意。