概念
单元测试(英语: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官网