Junit5单元测试

本文介绍了Junit5的关键依赖,包括junit-jupiter和junit-platform-suite。详细讲解了各种注解如@Test、@BeforeEach/AfterEach/BeforeAll/AfterAll的使用,以及测试用例的执行顺序、参数化测试和测试套件的创建方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Junit 5 的依赖

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter</artifactId>
    <version>5.8.2</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.junit.platform</groupId>
    <artifactId>junit-platform-suite</artifactId>
    <version>1.8.2</version>
    <scope>test</scope>
</dependency>

二、Junit - 注解

@Test

@BeforeEach

该注解是修饰方法的, 当一个测试方法加上 @BeforeEach 注解之后, 就表示当前方法需要在每个测试用例执行之前都执行一次. (注意加上 @BeforeEach 注解之后, 就不要加 @Test 注解了)

@BeforeAll

该注解是修饰方法的, 当一个测试方法加上 @BeforeAll 注解之后, 就表示当前方法需要在当前类下所有测试用例执行之前执行一次. 并且被该注解修饰的方法必须为静态方法. 

在测试项目的时候, 可以把创建驱动对象单独写一个方法, 使用 @BeforeAll 注解修饰. 

 @AfterEach

该注解是修饰方法的, 当一个测试方法加上 @AfterEach 注解之后, 就表示当前方法需要在每个测试用例执行之后都执行一次.

@AfterAll

该注解是修饰方法的, 当一个测试方法加上 @AfterAll 注解之后, 就表示当前方法需要在当前类下所有测试用例执行之后执行一次. 并且被该注解修饰的方法必须为静态方法.

在测试项目的时候, 可以把释放驱动对象单独写一个方法, 使用 @AfterAll 注解修饰. 

 

三、Junit - 断言

Assertions.assertEquals("判断", text)

Assertions.assertNotEquals("判断", text)

Assertions.assertTrue(1 == 1)

Assertions.assertFalse(1 == 0)

Assertions.assertNull(res)

四、Junit - 测试用例的执行顺序

Order指定顺序,从小到大

@Test

@Order(2)

void indexTest() {

        System.out.println("indexTest");

}

五、Junit - 参数化

使用了参数化注解的方法不能再用 @Test 注解. (@Test 只能作用在非参数化的用例上)

单参数数据来源

@ValueSource(数据类型方法 = {参数1, 参数2, 参数3 .....})

@ParameterizedTest
@ValueSource(strings = {"张三", "李四", "王五"})
void singleParamTest(String name) {
    System.out.println(name);
}

多参数数据来源

@CsvSource({"第一组数据", "第二组数据", "第三组数据", ....}) 

@ParameterizedTest
@CsvSource({"张三, 123","李四, 123", "王五, 123"})
void muchParamTest(String name, int age) {
    System.out.println("name: " + name + ", age : " + age);
}

第三方 csv 文件读取数据源

@CsvFileSource(files = "文件路径")

@ParameterizedTest
@CsvFileSource(files = "D:\\aa\\abc.csv")
void csvFileParamTest(String name, int age) {
    System.out.println("name: " + name + ", age : " + age);
}

动态方法提供数据源

@ParameterizedTest
@MethodSource("methodParams")
void dynamicMethodParamTest(String name, int age) {
    System.out.println("name : " + name + ",age : " + age);
}
static Stream<Arguments> methodParams() throws InterruptedException {
    // 构造动态参数
    String[] array = new String[5];
    for(int i = 0; i < array.length; ++i) {
        Thread.sleep(500);
        array[i] = String.valueOf(System.currentTimeMillis());
    }
    return Stream.of(
            Arguments.arguments(array[0], 21),
            Arguments.arguments(array[1], 22),
            Arguments.arguments(array[2], 23),
            Arguments.arguments(array[3], 24),
            Arguments.arguments(array[4], 25)
    );
}

六、JUnit - 测试套件

创建 runSuite 测试套件类, 添加@Suite注解, @SelectClasses 注解, 指定类运行类下的加了 @Test 注解, 或者参数化的测试用例.

@Suite
@SelectClasses({aaa.class,ccc.class})
public class runSuite {
}

指定包名来运行包下所有的用例

如果使用包名来指定运行的范围, 那么该包下所有测试类的命名必须要以 Test/Tests 结尾 (T 必须要大写) 

@Suite
@SelectPackages("com.autoTest5")
public class runSuite {
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值