单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。比如我们可以测试一个类,或者一个类中的一个方法。
为什么要进行单元测试?说白了就是单元测试有什么好处,其实测试的好处无非就是减少bug、提高代码质量、使代码易于维护等。
这样表达可能不太好理解,举个例子
比如我们APP启动,从初始化到启动页,再进入首页,需要很长的流程,如果主页需要请求数据,每次都要启动APP,经过一系列流程进入主页,才能测试主页请求数据模块,效率低下。
当然我们也能在初始化时请求数据,但是这样需要更改代码逻辑,同样需要启动APP,而如果用单元测试,我们可以直接测试请求数据模块,不需要任何逻辑修改。提高效率
AS创建工程时,src下创建 androidTest 和 test 目录,
这两个目录有什么区别呢?
src/test | src/androidTest |
---|---|
位于src/tests目录下的测试是运行在本地电脑Java虚拟机上的单元测试。编写测试,实现功能使测试通过,然后再添加更多的测试…这种工作方式使快速迭代成为可能,我们称之为测试驱动开发 | 跟src/test不同的是运行在设备上,并充分利用Android框架的测试 |
简单来说,src/test不需要你连接设备,而src/androidTest需要连接设备测试。
dependencies {
testCompile 'junit:junit:4.12'
}
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;
}
}
既然工具类写好了,当然要测试一下排序方法对不对了,这时候直接用单元测试来检验一下。
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():测试结束的回调方法。
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()方法,检测快速排序方法的正确性
./gradlew test
成功完成了 src/test 单元测试,
这里简单介绍了 src/test 测试,关于其他用法,大家可以去深入研究一下