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