Android 进阶 ------ Android 单元测试

什么是单元测试?

单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。比如我们可以测试一个类,或者一个类中的一个方法。

为什么要进行单元测试?

为什么要进行单元测试?说白了就是单元测试有什么好处,其实测试的好处无非就是减少bug、提高代码质量、使代码易于维护等。

这样表达可能不太好理解,举个例子

比如我们APP启动,从初始化到启动页,再进入首页,需要很长的流程,如果主页需要请求数据,每次都要启动APP,经过一系列流程进入主页,才能测试主页请求数据模块,效率低下。
当然我们也能在初始化时请求数据,但是这样需要更改代码逻辑,同样需要启动APP,而如果用单元测试,我们可以直接测试请求数据模块,不需要任何逻辑修改。提高效率

开始进行单元测试

AS创建工程时,src下创建 androidTest 和 test 目录,这两个目录有什么区别呢?

src/test src/androidTest
位于src/tests目录下的测试是运行在本地电脑Java虚拟机上的单元测试。编写测试,实现功能使测试通过,然后再添加更多的测试…这种工作方式使快速迭代成为可能,我们称之为测试驱动开发 跟src/test不同的是运行在设备上,并充分利用Android框架的测试

简单来说,src/test不需要你连接设备,而src/androidTest需要连接设备测试。

一、先说一下src/tests

首先确认app下gradle中存在依赖:

1
2
3
dependencies {
testCompile 'junit:junit:4.12'
}

这里有个 快速排序的类,对一个数组进行快速排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
public class FastSort {
public void main(){
int[] a = new int[]{5,10,34,2,45,38,23,70,1,32,20,17,4,80,14,100};
quick_sort(a,0,a.length - 1);
for (int i : a) {
System.out.println(i);
}
}
void quick_sort(int a[],int l,int r){
if (l < r){
int i = adjustArray(a,l,r);
quick_sort(a,l,i-1);
quick_sort(a,i+1,r);
}
}
private int adjustArray(int a[],int l,int r){
int i = l,j = r,x = a[i];
while (i < j){
while (i < j && a[j] >= x){ //如果 a[j] > x ,不用管,j-1,倒着比较下一个
j--;
}
if (i < j){ // a[j] < x 跳出while循环
a[i] = a[j]; //将a[j]的值赋给a[i]被挖出的位置,默认是数组都一个
i++; //i++,为后面i开始自增,提前增加
}
while (i < j && a[i] < x){ //如果 a[i] < x ,不用管,x+1,比较下一个
i++;
}
if (i < j){ // a[i] > x 跳出while循环
a[j] = a[i]; //将a[i]的值赋给上面a[j]被挖出的位置
j--; //j--,为后面j继续自减,提前减少
}
}
a[i] = x;
return i;
}
}

既然工具类写好了,当然要测试一下排序方法对不对了,这时候直接用单元测试来检验一下。

  • AS为我们提供了创建测试类的快捷方法:

这里写图片描述

  • 右键 –> Go To –> Test
    这里写图片描述

  • 勾选上所有方法,点击 OK,一路点击OK,完成测试类创建

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class FastSortTest extends TestCase {
    public void setUp() throws Exception {
    super.setUp();
    }
    public void tearDown() throws Exception {
    }
    public void testMain() throws Exception {
    }
    public void testQuick_sort() throws Exception {
    }
    }

setUp:在测试开始之前回调的方法( 比如说初始化我们的类)。
tearDown():测试结束的回调方法。

  • 来添加测试代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    public class FastSortTest extends TestCase {
    private FastSort sort;
    public void setUp() throws Exception {
    super.setUp();
    sort = new FastSort();
    }
    public void tearDown() throws Exception {
    }
    public void testMain() throws Exception {
    sort.main();
    }
    public void testQuick_sort() throws Exception {
    }
    }

sort.main()方法,检测快速排序方法的正确性

  • 开始测试
    右键点击FastSortTest类 —> ‘Run FastSortTest’,也可以通过命令行运行测试,在工程目录内输入:
    1
    ./gradlew test

这里写图片描述

测试结束,可以看到,sortMain()方法通过测试
这里写图片描述

成功完成了 src/test 单元测试,


这里简单介绍了 src/test 测试,关于其他用法,大家可以去深入研究一下

文章目录
  1. 1. 什么是单元测试?
  2. 2. 为什么要进行单元测试?
  3. 3. 开始进行单元测试
  4. 4. 一、先说一下src/tests
|