JUnit 5的框架介绍

JUnit 5的框架介绍

下面我来用比较口语化的方式和你聊聊JUnit 5的用法,从导包、简单Demo,到注意事项和一些小技巧,咱们一步步说清楚~

1. 导入依赖(导包)

首先,如果你是用Maven构建项目,就需要在pom.xml里加上JUnit 5的依赖。基本上只需要添加下面这段配置就行(记得scope设为test哦):

org.junit.jupiter

junit-jupiter-engine

5.8.2

test

这样Maven就会自动下载JUnit 5相关的jar包。除了这个,如果你需要参数化测试,还可以加上junit-jupiter-params依赖~

citeturn0search2

2. 编写Demo

咱们写个简单的单元测试来验证一个方法。假设你有个类叫HelloWorld,它有个方法sayHello()返回一个字符串。你可以这么写测试类:

import org.junit.jupiter.api.*;

class HelloWorldTest {

@BeforeAll

static void initAll() {

System.out.println("所有测试开始前的初始化...");

}

@BeforeEach

void init() {

System.out.println("每个测试前的准备工作...");

}

@DisplayName("测试 sayHello 方法")

@Test

void testSayHello() {

HelloWorld hw = new HelloWorld();

String result = hw.sayHello();

// 使用断言来检查返回结果是否符合预期

Assertions.assertEquals("Hello, world!", result);

}

@AfterEach

void tearDown() {

System.out.println("每个测试结束后的清理工作...");

}

@AfterAll

static void tearDownAll() {

System.out.println("所有测试结束后的清理工作...");

}

}

这里几个注解的意思简单说一下:

@BeforeAll 和 @AfterAll:分别在所有测试开始前和结束后只运行一次(记得它们必须是静态方法)。

@BeforeEach 和 @AfterEach:每个测试方法执行前后各执行一次。

@DisplayName:可以给测试类或方法自定义一个更友好的名字,这样在测试报告里看起来更清晰。

@Test:标记一个方法为测试方法。

citeturn0search0

在JUnit 5里,有个好处就是测试方法和类不用非得写成public,这和之前JUnit 4有点区别,写成包级私有也OK。

3. 注意事项

在使用JUnit 5时,有几点小细节需要注意:

测试方法必须是无参且返回void。如果有参数了(除非你用参数化测试),JUnit 5会报错。

@BeforeAll 和 @AfterAll方法一定要是static,否则运行时会出错。

测试方法不需要public修饰符,包级可见就够了。这点可以减少一些不必要的暴露~

citeturn0search5

如果你不想某个测试执行,可以加上@Disabled注解,这样JUnit在跑测试时就会跳过它。

尽量写有意义的断言。使用Assertions提供的断言方法(比如assertEquals、assertTrue等),而不要仅仅依赖打印信息来判断测试结果。

4. 使用技巧

除了基本用法之外,还有一些小技巧可以帮助你写出更好、更高效的测试代码:

参数化测试:用@ParameterizedTest配合@ValueSource、@CsvSource等可以让同一个测试方法跑多个数据组合。例如:

@ParameterizedTest

@ValueSource(ints = {2, 4, 6})

void testEvenNumbers(int num) {

Assertions.assertEquals(0, num % 2);

}

这样就不用写多个类似的方法啦。

citeturn0search8

重复测试:如果需要重复执行某个测试方法,可以用@RepeatedTest。例如:

@RepeatedTest(3)

void repeatedTest() {

System.out.println("这个测试会执行三次");

}

分组断言:使用assertAll可以把多个断言放在一块执行,这样即使有个别断言失败,也能把所有失败信息都显示出来,方便调试。例如:

@Test

void groupAssertions() {

int[] nums = {0, 1, 2, 3};

Assertions.assertAll("检查数组各项",

() -> Assertions.assertEquals(0, nums[0]),

() -> Assertions.assertEquals(1, nums[1]),

() -> Assertions.assertEquals(2, nums[2])

);

}

动态测试:JUnit 5还支持动态生成测试案例,通过@TestFactory返回一组DynamicTest,这对于测试一些运行时数据生成的场景非常有用。

使用Lambda表达式:在断言消息里使用Lambda表达式可以延迟构造消息,有助于性能优化,尤其是当构造断言信息比较耗时时。

citeturn0search4

小结

简单来说,JUnit 5让单元测试变得更灵活、更现代化。咱们只需要:

在项目中导入JUnit 5依赖(比如用Maven配置)。

编写测试类,利用注解(@Test、@BeforeAll、@DisplayName等)来组织测试代码。

注意测试方法的格式(无参、void、非public也OK)。

掌握参数化测试、重复测试、分组断言等技巧,让测试代码更高效、更易读。

这样你就能写出既稳健又便于维护的单元测试啦!希望这些讲解对你有帮助~

参考资料:

citeturn0search0

citeturn0search8

citeturn0search9

相关数据

王者荣耀姚是怎么玩花样的? 王者荣耀姚最强出装
365bet首页

王者荣耀姚是怎么玩花样的? 王者荣耀姚最强出装

⌛ 10-13 👁️‍🗨️ 5627
【原】常见柚子类(三):干水现象
365bet首页

【原】常见柚子类(三):干水现象

⌛ 09-28 👁️‍🗨️ 8708
【最美春天】木坑竹海,探寻《卧虎藏龙》的拍摄地
bat365在线平台用户官网

【最美春天】木坑竹海,探寻《卧虎藏龙》的拍摄地

⌛ 09-23 👁️‍🗨️ 7895
QQ怎样进行临时会话
365bet首页

QQ怎样进行临时会话

⌛ 08-20 👁️‍🗨️ 1617
随心而行 一嗨租车全国异地还车开启新自由
365bet首页

随心而行 一嗨租车全国异地还车开启新自由

⌛ 10-22 👁️‍🗨️ 2014
最新统计:中国国民党党员数88.87万人
bat365在线平台用户官网

最新统计:中国国民党党员数88.87万人

⌛ 07-30 👁️‍🗨️ 6225