Junit单元测试
测试分类:
(1)黑盒测试:不需要写代码,给输入值。看程序是否能够输出期望值。
(2)白盒测试:需要写代码。关注程序具体得执行流程。
Junit使用:白盒测试
步骤:
1. 定义一个测试类(测试用例)
* 建议:
* 测试类名:被测试的类名Test CalculatorTest
* 包名:xxx.xxx.xx.test cn.itcast.test
2. 定义测试方法:可以独立运行
* 建议:
* 方法名:test测试的方法名 testAdd()
* 返回值:void
* 参数列表:空参
3. 给方法加@Test
4. 导入junit依赖环境(是为了给@Test注解做依赖)
判定结果:
* 红色:失败
* 绿色:成功
* 一般我们会使用断言操作(Assert是Junit里面的工具类)来处理结果,而不是使用打印
* Assert.assertEquals(期望的结果,运算的结果);
补充:测试代码大多数情况下都是重复的操作。比如操作IO程序,要申请资源,最后又要释放资源,像这样很重复的操作,可使用下面两个注解完成
* @Before:
* 所修饰的方法将会在所有测试方法之前被自动执行
* @After:
* 所修饰的方法将会在所有测试方法执行之后自动被执行
// 定义一个类
public class Calculator {
// 加法
public int add(int a,int b){
return a+b;
}
// 减法
public int sub(int a,int b){
return a-b;
}
}
// 使用Junit单元测试
import demo23.Calculator;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
// 导入junit得依赖,才能使用注解@Test
public class JunitTest {
// 使用Junit测试add方法
@Test
public void addtest(){
System.out.println("虽然没有main方法,但是我被执行了");
// 可以进行单元测(1)创建计算器对象(2)调用add方法
Calculator calculator = new Calculator();
int add = calculator.add(1, 2);
// 推荐使用使用断言,而不是sout,如果正确则不输出,如果和期待的不一致则报错java.lang.AssertionError
Assert.assertEquals(3,add);
System.out.println("Junit测试:加法的结果="+add);
}
@Test
public void subTest(){
Calculator calculator = new Calculator();
int sub = calculator.sub(1, 2);
Assert.assertEquals(-1,sub);
System.out.println("Junit测试:减法的结果="+sub);
}
public void init(){
System.out.println("伪开始:我要开始了");
}
public void close(){
System.out.println("伪结束:我要结束了");
}
@Before
public void initTrue(){
System.out.println("使用了Before注解修饰符是真开始:我要开始了");
}
}
注意:
(1)可以看到,凡是加上@Test的注解的块,左边都有一个run标识,都可以作为独立代码块执行。如果使用@Before或者@After修饰的方法(和方法名无关),不管执行哪一块都是要执行的。
(2)如果是点击第一个类的执行,也就是执行所有的@注解方法,那么普通方法之间的执行顺序是随机的,不是按按照方法顺序而执行的。