目录
Junit
- Junit 是 Java 语言编写的第三方单元测试框架(工具类);
- 类库 ==> 类 junit.jar;
1. 单元测试
- 单元:在 Java 中,一个类、一个方法就是一个单元;
- 单元测试:程序员编写的一小段代码,用来对某个类中的某个方法进行功能测试或业务逻辑测试;
a. Junit 单元测试框架的作用
- 用来对类中的方法功能进行有目的的测试,以保证程序的正确性和稳定性;
- 能够让方法独立运行起来;
b. Junit 单元测试框架的使用步骤
- 编写业务类,在业务类中编写业务方法。比如增删改查的方法;
- 编写测试类,在测试类中编写测试方法,在测试方法中编写测试代码来测试;
- 测试类的命名规范:以 Test 开头,以业务类类名结尾,使用驼峰命名法:
- 每一个单词首字母大写,称为大驼峰命名法,比如类名,接口名…;
- 从第二单词开始首字母大写,称为小驼峰命名法,比如方法命名;
- 比如业务类类名:ProductDao,那么测试类类名就应该叫:TestProductDao;
- 测试方法的命名规则:以 test 开头,以业务方法名结尾:
- 比如业务方法名为:save,那么测试方法名就应该叫:testSave;
- 测试类的命名规范:以 Test 开头,以业务类类名结尾,使用驼峰命名法:
2. 测试方法
a. 测试方法注意事项
- 必须是 public 修饰的,没有返回值,没有参数;
- 必须使用 JUnit 的注解 @Test 修饰;
b. 如何运行测试方法
- 选中方法名 >> 右键 >> Run ‘测试方法名’ 运行选中的测试方法;
- 选中测试类类名 >> 右键 >> Run ‘测试类类名’ 运行测试类中所有测试方法;
- 选中模块名 >> 右键 >> Run ‘All Tests’ 运行模块中的所有测试类的所有测试方法;
c. 如何查看测试结果
- 绿色:表示测试通过;
- 黄色:表示断言错误,测试程序有问题;
- 红色:表示测试失败,被测试的代码有问题;
3. Junit 常用注解
a. Junit 4.x 版本
- @Before:用来修饰方法,该方法会在每一个测试方法执行之前执行一次;
- @After:用来修饰方法,该方法会在每一个测试方法执行之后执行一次;
- @BeforeClass:用来静态修饰方法,该方法会在所有测试方法之前执行一次,而且只执行一次;
- @AfterClass:用来静态修饰方法,该方法会在所有测试方法之后执行一次,而且只执行一次;
b. Junit 5.x 版本
- @BeforeEach:用来修饰方法,该方法会在每一个测试方法执行之前执行一次;
- @AfterEach:用来修饰方法,该方法会在每一个测试方法执行之后执行一次;
- @BeforeAll:用来静态修饰方法,该方法会在所有测试方法之前执行一次;
- @AfterAll:用来静态修饰方法,该方法会在所有测试方法之后执行一次;
4. JUnit 4.x 示例代码
a. 业务类
/**
* 业务类:实现加减乘除运算
*/
public class Calculate {
/*
业务方法1:求a和b之和
*/
public int sum(int a, int b) {
return a + b + 10;
}
/*
业务方法2:求a和b之差
*/
public int sub(int a, int b) {
return a - b;
}
}
b. 测试类
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
public class TestCalculate {
static Calculate c = null;
@BeforeClass // 用来静态修饰方法,该方法会在所有测试方法之前执行一次。
public static void init(){
System.out.println("初始化操作");
// 创建Cacluate对象
c = new Calculate();
}
@AfterClass // 用来静态修饰方法,该方法会在所有测试方法之后执行一次。
public static void close(){
System.out.println("释放资源");
c = null;
}
/* @Before // 用来修饰方法,该方法会在每一个测试方法执行之前执行一次。
public void init(){
System.out.println("初始化操作");
// 创建Cacluate对象
c = new Cacluate();
}
@After // 用来修饰方法,该方法会在每一个测试方法执行之后执行一次。
public void close(){
System.out.println("释放资源");
c = null;
}*/
@Test
public void testSum(){
int result = c.sum(1,1);
/*
断言:预习判断某个条件一定成立,如果条件不成立,则直接奔溃。
assertEquals方法的参数
(String message, double expected, double actual)
message: 消息字符串
expected: 期望值
actual: 实际值
*/
// 如果期望值和实际值一致,则什么也不发生,否则会直接奔溃。
Assert.assertEquals("期望值和实际值不一致",12,result);
System.out.println(result);
}
@Test
public void testSub(){
// 创建Cacluate对象
// Cacluate c = new Cacluate();
int result = c.sub(1,1);
// 如果期望值和实际值一致,则什么也不发生,否则会直接奔溃。
Assert.assertEquals("期望值和实际值不一致",0,result);
System.out.println(result);
}
}
Junit 的测试方法只能用 void 修饰。