前言
在前面文章中,我大概梳理了一下自己在以往学习到的Android中常用的一些自动化测试,这篇文章就讲一讲如何来一步步使用本地单元测试Local Unit Tests。文章中所讲的都是JUnit 4 在Android中的使用,详细的介绍可以查看这篇文章:
Android自动化测试--学习浅谈
使用
首先我们在Android Studio中新建一个项目,取名为 LocalUnitTests。
然后一直选择Next,选择创建一个Empty Activity。
然后选择Next,使用默认的设置,选择Finish。
项目创建完成后,project面板中默认是Android,我们想将他切换到Project
选中Project
接下来我们展开app,看一下目录结构
从目录结构中我们可以看到,除了main文件夹外,还有两个文件夹androidTest和test。这两个都是Android Studio自动生成的(我的Android Studio版本2.2.3),也就是用来编写我们的测试代码的。为了学习,我们先将相关的全部删掉,只保留main文件夹需要的。
接下来我们看看如何一步一步的来使用,首先在app目录的 build.gradle 文件中添加下面的引入,根据提示点击Sync Now。
dependencies {
// JUnit 4 framework
testCompile 'junit:junit:4.12'
}
接下来我们在项目中新建一个Calculation类,并且添加一些我们需要测试的方法
接下来我们添加测试方法,选中add >>点击鼠标右键 >> Go To >> Test
选择Create New Test
Testing library选择JUnit,同时选中待测试的方法,点击OK。
选择目录为...\app\src\test\java...,点击OK
我们可以看到,Android Studio已经为我们生成了测试类
接下来我们编写待测试的方法
public class Calculation {
/**
* 简单模拟平时编写的方法
* @param a
* @param b
* @return
*/
public int add(int a, int b) {
return a + b;
}
public int multiply(int one, int another) {
return one * another;
}
}
测试类
public class CalculationTest {
Calculation calculation;
@BeforeClass
public static void start() throws Exception {
System.out.println("类运行时调用一次");
}
@AfterClass
public static void end() throws Exception {
System.out.println("类结束时调用一次");
}
@Before
public void before() throws Exception {
calculation = new Calculation();
System.out.println("每个test方法前都会调用");
}
@After
public void after() throws Exception {
System.out.println("每个test方法后都会调用");
}
@Test
public void add() throws Exception {
System.out.println("test add");
int r = calculation.add(2, 3);
Assert.assertEquals(5, r);
}
@Test
public void multiply() throws Exception {
System.out.println("test multiply");
int r = calculation.multiply(2, 3);
Assert.assertEquals(6, r);
}
}
接下来我们运行一下看看效果,直接测试类上单击鼠标右键 >> 选择Run 'CalculationTest'
运行结果
接下来我们修改一下add方法,将正确结果5改为了6,再运行试试
@Test
public void add() throws Exception {
System.out.println("test add");
int r = calculation.add(2, 3);
Assert.assertEquals(6, r);//正确结果5改为了6
}
运行结果
从结果中我们可以看出来,有醒目的红色输出了错误信息,这是因为我们断言的Assert.assertEquals(6, r)
,与实际得到的值不一致提示我们的。实际测试中我们也是通过Assert.assert
来断言预期值与实际值之间的关系来判断结果。除了assertEquals
外还有很多其他方法,详细的可以查看官方API Assert。
接下来我们恢复刚刚的修改,然后修改一下Calculation
中的add方法,增加了一句log打印语句。
public int add(int a, int b) {
Log.d("TAG", "add");
return a + b;
}
然后我们看看运行结果
同样结果中抛出了异常,因为我们刚刚增加的Log.d("TAG", "add");
是Android中包含的方法,在java中并没有。而目前我们使用的Local Unit Tests
也只是引入了JUnit
,所以没办法直接调用。所以就有了我们的设备单元测试Instrumented Unit Tests
,详细的使用可以查看我的下一篇文章。