Junit 是一个用于 Java 编程语言的单元测试框架,Selenium是自动化测试框架,专门用于Web测试
本篇博客介绍 Junit5
文章目录
- Junit 使用
- 语法
- 注解
- 参数
- 执行顺序
- 断言
- 测试套件
Junit 使用
本篇博客使用 Idea集成开发环境
首先,创建新项目,注意选择 Maven
创建新类 —— JunitTest
使用 Junit 相关语法,需要添加依赖
在 pom.xml 中添加相关依赖
相关依赖可以从Maven官网获取
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.9.1</version>
</dependency>
注意重新加载 Maven,下载相应的包
至此就可以使用基本的 Junit 语法
语法
注解
Junit 使用注解来定义测试用例,设置测试环境和执行一些操作
@Test
标记一个方法为测试方法。JUnit 会自动识别并执行这个方法。
点击特定测试用例左侧的运行图标,可以只执行该测试用例,如 Test01 和 Test02 左侧的图标
点击 JunitTest ,类旁边的图标,会执行该类中的所有测试用例
@Disabled
使用该注解,执行全部测试用例时,会跳过执行该测试用例
@BeforeAll
使用该注解的方法要是 static
使用该注解的方法会在所有测试用例执行前执行,不论是单个执行还是全部执行
@AfterAll
使用该注解的方法要是 static
使用该注解的方法会在所有测试用例执行后执行,不论是单个执行还是全部执行
@BeforeEach
使用该注解的方法会在每个测试用例执行前执行
@AfterEach
使用该注解的方法会在每个测试用例执行后执行
参数
使用参数,需要引入依赖
<!-- 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>
使用参数要带上@ParameterizedTest
- 单参数
使用@ValueSource
指定测试用例
@ParameterizedTest
@ValueSource(ints = {1, 2, 3})
void Test04(int num){
System.out.println("Test04 num = " + num);
}
因为有3个参数,所以会执行三次
同样也可以传字符串
@ParameterizedTest
@ValueSource(strings = {"1", "2", "3"})
void Test05(String str){
System.out.println("Test05 string = " + str);
}
- CSV多参数
通过 ""
指定多个参数,多组参数用,
分割
@ParameterizedTest
@CsvSource({"张三, 20, 男",
"李四, 24, 男",
"田六, 18, 女"})
void Test08(String name, int age, String gender){
System.out.println("姓名: " + name + " 年龄: " + age + " 性别: " + gender);
}
- 通过CSV文件获取参数
Junit规定,通过文件传参的文件后缀必须以.csv
结尾
一行为一次测试用例输入
test01.csv
测试代码:
@ParameterizedTest
@CsvFileSource(resources = "test01.csv")
void Test06(String name) {
System.out.println(name);
}
- 通过方法获取参数 & 多参数
public static Stream<Arguments> Generator() {
return Stream.of(Arguments.arguments(1, "张三"),
Arguments.arguments(2, "李四"),
Arguments.arguments(3, "王五")
);
}
@ParameterizedTest
@MethodSource("Generator")
void Test07(int num, String name){
System.out.println(num + ":" + name);
}
执行顺序
不指定执行顺序的情况下,除了 Before 和 After 系列,其他测试用例的执行顺序根据不同解释器不同的算法会有不同的执行顺序。
不过我们也可以指定执行顺序
方法是在测试类使用注释@TestMethodOrder
,然后在测试用例使用@Order
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class JunitTest {
@Order(1)
@Test
void Test01(){
System.out.println("这是JunitTest里面的Test01");
}
@Order(3)
@Test
void Test02(){
System.out.println("这是JunitTest里面的Test02");
}
@Order(2)
@ParameterizedTest
@ValueSource(ints = {1, 2, 3})
void Test04(int num){
System.out.println("Test04 num = " + num);
}
}
通过Order
指定顺序
断言
断言用于验证测试结果是否符合预期。JUnit 提供了多种断言方法,可以用于检查值是否相等,是否为真,是否为假等。
以下是常用的断言方法:
常用断言方法
assertEquals(expected, actual)
- 检查两个值是否相等,第一个参数是预期值,第二个是实际值
import static org.junit.Assert.assertEquals;
@Test
public void Test() {
int sum = 2 + 3;
Assertions.assertEquals(6, sum); // 验证 2 + 3 是否等于 6
}
结果当然是错误的,运行结果会打印出预期值和实际值方便调试
assertTrue(condition)
- 检查条件是否为真
import static org.junit.Assert.assertTrue;
@Test
public void testIsPositive() {
int number = 10;
Assertions.assertTrue(number > 0); // 验证 number 是否大于 0
}
assertNull(object)
- 检查对象是否为 null
import static org.junit.Assert.assertNull;
@Test
public void testObjectIsNull() {
Object obj = null;
Assertions.assertNull(obj); // 验证 obj 是否为 null
}
assertArrayEquals(expectedArray, actualArray)
- 检查两个数组是否相等
import static org.junit.Assert.assertArrayEquals;
@Test
public void testArrayEquality() {
int[] expected = {1, 2, 3};
int[] actual = {1, 2, 3};
Assertions.assertArrayEquals(expected, actual); // 验证两个数组是否相等
}
上述方法都有相反的断言,如 assertEquals 相反的为 assertNotEquals
测试套件
要使用测试套件,需要添加如下两个依赖
<!-- 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>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.9.1</version>
<scope>test</scope>
</dependency>
测试套接(Test Suite) 是一个用于组织和运行多个测试用例的集合。在软件测试中,测试套件通常用于将相关的测试用例结合在一起,以便能够方便地执行和管理
-
测试套件的定义
- 测试套件 是一组测试用例的集合,可以是一个或多个测试类的集合。通过使用测试套件,可以一次性运行所有相关的测试用例,而不需要逐个运行。
- 测试套件通常用于集成测试或系统测试,可以确保应用程序的不同部分能够协同工作。
-
使用测试套件的好处
- 组织性:将相关测试组织在一起,便于管理和维护。
- 效率:可以一次性运行多个测试,节省时间。
- 可重用性:可以在不同的测试环境中重用测试套件。
- 可读性:提高代码的可读性,使测试代码结构更加清晰。
介绍两种最常用的测试套件
根据 Class 运行
需要在测试类上添加注释@Suite
和@SelectClasses
@Suite
@SelectClasses({Test02.class, Test01.class})
public class RunTest {
}
上述代码表示,先运行 Test02 的测试用例,再运行 Test01 的测试用例
根据 Package 运行
需要在测试类上添加注释@Suite
和@SelectClasses
目录结构如下:
测试套件如下:
@Suite
@SelectPackages(value = {"package1", "package2"})
public class RunTest {
}
以上就是本篇博客的所有内容,感谢你的阅读
如果觉得本篇文章对你有所帮助的话,不妨点个赞支持一下博主,拜托啦,这对我真的很重要。