Android单元测试框架及设计过程中的具体思路
时间:2020-09-06 10:09:57 点击:885次
一、测试金字塔
小型测试是指单元测试,用于验证应用的行为,一次验证一个类。
中型测试是指集成测试,用于验证模块内堆栈级别之间的交互或相关模块之间的交互。
大型测试是指端到端测试,用于验证跨越了应用的多个模块的用户操作流程。
用于执行测试用例指令的 app-debug.apk; 用于执行测试用例的 app-debug-androidTest.apk; 将来可采用application module的方式,新增其它的测试业务,将测试用例模块与测试业务模块拆分,减少对业务模块代码的污染;
androidTest — android单元测试或UI测试源码目录,需运行在模拟器或真机; main — 接收和执行测试指令的源码目录,运行在模拟器或真机; test — java单元测试源码目录,也可通过mock或Robolectric技术执行android单元测试,运行在JVM;
三、开发测试用例
在module gralde中,添加如下配置项。
1) 配置依赖项
插桩单元测试的用例代码,需要放在module_name/src/androidTest[VariantName]/java/ 目录下。
一般在新建工程时,AS默认会自动创建这些目录 。当然也可以手动创建:选择任意一个源代码方法,调出创建新测试的窗口(ctrl+shift+T),如下图:
点击进入“Create Test”对话框,然后选择Destination Package栏的“...”来选择包结构。如下图:
点击“OK”之后,会生成相应的测试目录。
使用AndroidX Test API+JUni4编写测试用例。插桩单元测试类应该是一个 JUnit 4 测试类。
常用注解
使用断言
推荐使用Google的Truth断言。
测试类命名规则
类名+Test 或者 类名+InstrumentedTest。例如:
对于接口类,如果接口类名的字母I开头,其测试类名开头不用包含字母I。
四、运行测试用例
使用build task进行编译时,如果project中有超过1个的application module,则编译module时,需指定module名。命令格式如下:
$./gradelw :moduleName:taskName
例如:
$./gradlew :app:build
可用./gradlew projects查看module名。例如:
使用install task进行安装。命令格式如下:
$./gradelw :moduleName:install+variantName
例如:
$./gradlew :app:installDebugAndroidTest
使用connected task进行测试,命令格式如下:
$./gradlew connectedAndroidTest
或者使用adb命令启动测试。命令格式如下:
$adb shell am instrument [flags]
如果在app的gradle文件中,没有另行指定test_package,在app的package_name后追加.test即可。例如:
$adb shell am instrument -wcom.example.junitframework.test/androidx.test.runner.AndroidJUnitRunner
详情参考gradle官方文档和Android Studio官方文档。