单元测试的作用
在Android开发中,如果对一个简单的功能,每次修改代码都重新运行到设备中进行测试,会浪费大量时间,降低开发工作效率。如果使用单元测试,编写单元测试类,执行测试单元测试类就可以对某些功能进行测试,大大提升了开发工作效率。
单元测试框架的引入
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
一般默认studio在你创建项目的时候,就已经引入了
- testImplementation-引入的依赖是java unit单元测试,是运行在当前电脑的jvm上的单元测试;
- androidTestImplementation-引入的依赖是Android单元测试,是运行在Android环境的单元测试。
目录结构
- androidTest/java(Android单元测试,运行在当前电脑的jvm上的单元测试,执行测试的时候需要Android连接设备,速度比较慢,适合需要调用Android api的单元测试)
- test/java(JUnit单元测试,用来放不需要Android依赖的单元测试类,运行在当前电脑的jvm上的单元测试,速度快,适合只是对java代码功能进行单元测试)
代码展示
先编写一个计算类
public class Calculator {
public double sum(double a, double b){
return a+b;
}
public double substract(double a, double b){
return a-b;
}
public double divide(double a, double b){
return a/b;
}
public double multiply(double a, double b){
return a*b;
}
}
可以右键点击自动生成一个test类
在上面自动生成类的基础上,补充好自己的测试代码
public class CalculatorTest {
private Calculator mCalculator;
@Before //一般在这里做初始化的代码,这里是创建计算类的对象
public void setUp() throws Exception {
mCalculator = new Calculator();
}
@Test
public void sum() throws Exception {
assertEquals(6d, mCalculator.sum(1d, 5d), 0); //进行具体的单元测试
}
@Test
public void substract() throws Exception {
assertEquals(2d, mCalculator.substract(5d, 4d), 0);
}
@Test
public void divide() throws Exception {
assertEquals(3d, mCalculator.divide(20d, 5d), 1);
}
@Test
public void multiply() throws Exception {
assertEquals(12d, mCalculator.multiply(2d, 5d), 1);
}
}
然后可以右键点击,运行测试文件整体类,或者单独在方法上右键点击测试某个方法,
测试结果如下:
测试成功的,为绿色,失败的为黄色,会告诉你具体的失败原因;
在加减乘除方法调用assertEquals()方法,来计算测试结果,第一个参数,需要填入正确结果,第二个参数为我们的方法调用,第三个参数为允许误差值
单元测试的断言
这篇笔记只是大致描述一下单元测试,具体单元测试的详尽写法,可以参考
Android开发进阶:从小工到专家 这本书
单元测试是很强的一个功能,当需要测试某一条件数值时程序的计算结果,就完全可以使用单元测试,比如开发过的区块链项目中,关于订单计算时候,当时为了计算两个数值的运算,每次手动去修改bean对象的数值,再编译运行,太耗费时间了,如果当时有重点了解过单元测试,编写一个测试用例,保守估计提高20倍的效率,单元测试很值得重视!