概念
单元测试(英语:Unit Testing)又称为模块测试, 是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。
意义
- 减少bug
- 快速定位bug
- 提高代码质量
- 减少调试时间
安卓单元测试
测试类型和位置
1.本地单元测试
代码位于 module-name/src/test/java/
中。
这些测试在计算机的本地 Java 虚拟机 (JVM) 上运行。
2.仪器测试
代码位于 module-name/src/androidTest/java/
中。
这些测试在硬件设备或模拟器上运行。
测试
1.打开想测试的代码的 Java 文件
1 | public class MathUtil { |
2.选中测试的类或方法,右击Go To > Test
3.在出现的菜单中,点击 Create New Test。
4.在 Create Test 对话框中,编辑任何字段并选择任何要生成的方法,然后点击 OK。
5.在 Choose Destination Directory 对话框中,点击想创建的测试类型对应的源集。
1 | import org.junit.After; |
运行测试
1.点击工具栏中的 Sync Project ,确保项目已同步。
2.在 Project 窗口中,右键点击测试,然后点击 Run。
1 | 1 test passed - 2ms |
测试完成.
Mockito测试
Mockito是一个优秀的用于单元测试的mock框架。
mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。
1.添加Mockito依赖
1 | dependencies { |
2.测试代码:
1 | import org.junit.Test; |
Github地址:https://github.com/mockito/mockito
官网:http://mockito.org
Espresso单元测试
Espresso是一个Google官方提供的Android应用UI自动化测试框架。
- 收录在Android Testing Supporting Library底下的测试框架
- 模拟用户操作
- 自动等待,直到UI线程Idle,才会执行测试代码
1.build.gradle例子
1 | apply plugin: 'com.android.application' |
2.测试代码:
1 | import android.support.test.rule.ActivityTestRule; |
右击Run,Select Deployment Target即可
遇到的问题
Execution failed for task ‘:app:preDebugAndroidTestBuild’
1 | Error:Execution failed for task ':app:preDebugAndroidTestBuild'. |
see: https://d.android.com/r/tools/test-apk-dependency-conflicts.html
在dependencies中添加resolutionStrategy.force
1 | dependencies { |
后语
结合Jacoco代码覆盖率单元测试.
- 分析未覆盖部分的代码
- 检测出程序中的废代码
- 提升代码质量
相关主题
- https://developer.android.com/studio/test/ , 测试应用 | Android Studio
- https://developer.android.com/training/testing/espresso/setup , Espresso setup instructions
- http://mockito.org , mockito官网