Android测试
2015-12-09 11:03:20 4 举报
AI智能生成
Android测试是针对Android操作系统的应用程序进行的一系列验证和评估活动,旨在确保软件在各种设备和环境下的性能、稳定性和安全性。这包括对应用的功能、界面、性能、兼容性、安全性等方面进行全面的检查和测试。Android测试通常采用自动化测试工具和手动测试相结合的方式,以确保在短时间内发现并修复潜在的问题。此外,为了适应不断变化的市场需求和技术环境,Android测试还需要定期进行更新和优化。总之,Android测试是确保应用程序质量和用户体验的关键过程,对于软件开发团队来说具有重要意义。
作者其他创作
大纲/内容
1概览
集成
Android Studio IDE
单元测试UT
Hermetic测试
功能UI测试 + 集成验收(正式环境)
目标内容
轻量应用框架Model-View-Presenter模式
Gradle + Android Studio运行测试
用JUnit4写单元测试
用Espresso和安卓support库写UI测试
Espresso更多专题
Espresso-contrib
Espresso-intents
IdlingResources
生成代码覆盖报告
准备
Android Studio 1.4+
Note示例代码
测试机或模拟器(Android5.0+, API > 21)
[测试机]连接USB线
2示例代码
准备版本step-1-5
示例app功能
查看所有notes
打开一条note详情
新增note或附图片
UI页面
RecyclerView展示所有notes
Notes详情
添加页面:写标题,内容或附加照片
JUNIT4和Mockito进行单元测试版本step6
Espresso进行UI测试step7
Espresso-Intents专题step8
Espresso-Contrib专题step9
IdlingResource和代码覆盖最终版final
3安卓的测试
手工测试的挑战
设备处理能力不一
内存差异
网络连接环境变化大
其他外部因素
自动化测试支持库
AndroidJUnitRunner兼容JUNIT4 单元测试
Espresso UI测试
UI Automator UI测试
自动化测试运行
Android Studio IDE
命令行
4MVP架构
测试对架构的需要
可测试性是衡量应用架构的一个因素
应用各部分代码分离,可分开测试,维护
MVP把应用分为三部分:数据模型和视图完全隔离,供表达层Presenter处理逻辑,调用
MVP
Model
提供,存储内部数据
note的Model模型:标题+描述+图片
通过数据源和API终端提供
类:Note, NotesRepository, NotesServiceApi
子主题
View
显示数据的视图(易与安卓的View控件概念混淆)
用户的操作转给Presenter
示例程序使用Fragment实现(安卓Fragment, Activity, View都可以)
显示notes列表
接口NotesContract.View
实现NotesFragment
详情NoteDetailContract.View
接口NoteDetailContract.View
实现NoteDetailFragment
给新建(操作)展示输入界面
接口AddNoteContract.View
实现AddNoteFragment
Presenter
衔接UI和数据同步
更新view视图
响应用户在视图上做的操作
从数据模型model取数据,准备(格式),显示到视图view
更新数据模型
例程
NotesPresenter从api读取notes列表
NoteDetailPresenter加载单条note
AddNotePresenter增加note
5例程MVP详解
打开step-1-5工程
Android Studio -> open settings.gradle
白屏,灭有notes
按钮,点击无响应
实现了MVP架构的空壳,作为后续的起点
应用结构:一个功能分一个包
另一种结构:按层分包,M.V.P分别在一个包里
关键功能在自己的包里
.addnote增加新建"Add Note"
.data存储note模型层
.notedetail显示一条note的详情"Note Detail"
.notes显示所有notes的列表"Notes"
.statstics统计屏
.util为各部分公用的工具类,如文件访问
模块可独立修改,可读性
个功能包Contract接口声明View协议,Presenter回调
同一功能包含的类,清晰
同一功能类之间的关联,清晰
深入Notes列表功能
程序启动第一个功能
显示notes列表
包名com.example.android.testing.notes
类
NotesActivity程序起点,持有NotesFragment
NotesContract.View定义视图层的协议
NotesContract.UserActionsListener视图和presenter间的交互
NotesFragment视图的具体实现
NotesPresenter实现NotesContract.UserActionsListener监听用户操作,持有NotesContract.View引用,数据模型变化时更新同步视图
视图层
NotesFragment实现此功能的视图接口NotesContract.View
视图层暴露给表达层的接口功能NotesContract.View
setProgressIndicator
showNotes
showAddNote
showNoteDetailUi
表达层
NotesPresenter实现此功能的操作接口NotesContract.UserActionsListener
在视图可开始的操作NotesContract.UserActionsListener
loadNotes加载所有
addNewNote新添加
openNoteDetails打开详情
表达层和视图层的链接
NotesFragment持有mActionsListener对象:新建,打开详情,加载全部
创建NotesPresenter
onActivityCreated
通过类Injection获得数据源实例
后续测试易于轻松替换实现
如在测试中使用另一替换服务
测试打桩
打桩或模拟对象进某些组件
隔离测试
如notes模拟数据源,实现加载和保存note
Injection返回返回两套数据源实例
prod线NotesServiceApiImpl.java实现网络延迟模拟
mock线完全打桩实现整个数据集的模拟FakeNotesServiceApiImpl.java
gradle能自动识别prod和mock线的flavor并直接编译prodDebug和mockDebug
编译运行prodDebug:AS左下角Build Variants -> prodDebug, Run
更牛逼的依赖注入得靠Dagger2
6JUNIT4和Mockito单元测试
目标
工程配置测试
本地测试支持
不依赖安卓framework
不依赖测试机
工程源码src/
test-不依赖测试设备的单元测试
androidTest-依赖测试机或模拟器的安卓测试
androidTestMock-用到mock渠道的安卓测试
一个工程多渠道,src/下放各个渠道代码
mock替换应用某些部分,Injection提供使用假数据的哑元实现,模拟外部复杂真实对象的行为,隔离执行不受网络,外部存储限制
prod相对于mock,Injection提供真实上下文的依赖的实现
main大部分代码放这里,少数变化的放在mock和prod里
测试代码,大部分放在androidTest里,少数使用了mock/里实现的放在androidTestMock
渠道目录里的代码不会替换main目录里,如都放一个同名类,会出现冲突
build.gradle
JUNIT, Mockito,Hamcrest匹配
testCompile "junit:junit:$rootProject.ext.junitVersion"
testCompile "org.mockito:mockito-all:$rootProject.ext.mockitoVersion"
testCompile "org.hamcrest:hamcrest-all:$rootProject.ext.hamcrestVersion"
testCompile "org.powermock:powermock-module-junit4:$rootProject.ext.powerMockito"
testCompile "org.powermock:powermock-api-mockito:$rootProject.ext.powerMockito"
Build Variant切换到Unit Tests
在Android Studio中运行测试
用单元测试完成组件间协议
测试驱动开发TDD
先写测试代码描述功能
测试用例定义presenter的协议
实现功能
TDD帮助
应用各部分的设计
理解各个对象的职责,相互间的通讯
开始细节实现之前
Notes列表的TDD
功能;显示所有保存notes的列表
范围:表达层和数据源的交互
组件间的交互先测试
本地UT测试
NotesPresenter的单元测试
摘要
UT只测很小的一个单元
先写测试代码,后写逻辑代码
分支主题 7
EX.安卓开发文化
0 条评论
下一页