文章目录
- [1. 什么是 Junit ?](#1. 什么是 Junit ?)
- [2. 常见的注解](#2. 常见的注解)
-
- [2.1 @Test](#2.1 @Test)
- [2.2 @BeforeAll,@AfterAll](#2.2 @BeforeAll,@AfterAll)
- [2.3 @BeforeEach,@AfterEach](#2.3 @BeforeEach,@AfterEach)
- [3. 测试用例顺序指定](#3. 测试用例顺序指定)
- [4. 参数化](#4. 参数化)
-
- [4.1 单个参数](#4.1 单个参数)
- [4.2 多个参数](#4.2 多个参数)
- [4.3 通过方法生成](#4.3 通过方法生成)
- [5. 测试套件](#5. 测试套件)
- [6. 断言](#6. 断言)
-
- [6.1 断言相等](#6.1 断言相等)
- [6.2 断言不相等](#6.2 断言不相等)
- [6.3 断言为空](#6.3 断言为空)
- [6.4 断言不为空](#6.4 断言不为空)
1. 什么是 Junit ?
Junit 是 Java 的单元测试框架
在 Java 项目中加入 Junit 依赖
java
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.9.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-params -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>5.9.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.junit.platform/junit-platform-suite -->
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-suite</artifactId>
<version>1.9.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.9.1</version>
<scope>test</scope>
</dependency>
2. 常见的注解
2.1 @Test
- @Test:表名当前的方法是一个测试用例
java
import org.junit.jupiter.api.Test;
public class JunitTest {
@Test
void Test01() {
System.out.println("========这是第一个测试用例=======");
}
@Test
void Test02() {
System.out.println("========这是第二个测试用例=======");
}
}
2.2 @BeforeAll,@AfterAll
- @BeforeAll:当前 class 中所有测试用例执行之前自动执行
- @AfterAll:当前 class 中所有测试用例执行结束之后自动执行
java
@BeforeAll
static void Start() {
System.out.println("开始测试");
}
@AfterAll
static void End() {
System.out.println("结束测试");
}
2.3 @BeforeEach,@AfterEach
- @BeforeEach:当前 class 中每一个测试用例执行结束之前执行一次
- @AfterEach:当前 class 中每一个测试用例执行结束之后执行一次
java
@BeforeEach
void StartV1() {
System.out.println("开始执行");
}
@AfterEach
void EndV1() {
System.out.println("执行结束");
}
3. 测试用例顺序指定
- @TestMethodOrder(MethodOrderer.OrderAnnotation.class)
4. 参数化
4.1 单个参数
java
//单参数
@ParameterizedTest
@ValueSource(ints = {1,2,3,4})
void Test03(int x) {
System.out.println("接收参数是 x = " + x);
}
单参数有它的弊端,只能接收一种类型的参数,对应的 Test 方法,只能接收一个参数
4.2 多个参数
java
//多参数
@ParameterizedTest
@CsvSource({"'张三','18'"})
void Test04(String name, int age) {
System.out.println(name + "今年 " + age + " 岁");
}
参数化对应的注解上面如果写了Test,测试用例就会执行两次
其中一次就会报错,因为 Test 和 方法结合,没有找到参数,就会报错
java
//多参数,读取文件中的数据,进行操作
@ParameterizedTest
@CsvFileSource(resources = "test01.csv")
void Test05(String name, int age) {
System.out.println("name:" + name + ", age:" + age);
}
4.3 通过方法生成
java
public static Stream<Arguments> Generate() {
return Stream.of(
Arguments.arguments("张三", 13),
Arguments.arguments("李四",14)
);
}
//通过方法生成测试数据
@ParameterizedTest
@MethodSource("Generate")
void Test06(String name, int age) {
System.out.println("姓名:" + name + "年龄:" + age);
}
5. 测试套件
- @Suite
6. 断言
6.1 断言相等
java
//断言相等
@Test
void Test07() {
int x = 10;
int y = 20;
Assertions.assertEquals(x, y);
}
6.2 断言不相等
java
//断言不相等
@Test
void Test07() {
int x = 10;
int y = 20;
Assertions.assertNotEquals(x, y);
}
6.3 断言为空
java
//断言为空
@Test
void Test07() {
int x = 10;
int y = 20;
String tmp = null;
Assertions.assertNull(tmp);
}
6.4 断言不为空
java
//断言不为空
@Test
void Test07() {
int x = 10;
int y = 20;
String tmp = null;
Assertions.assertNotNull(tmp);
}