#独家
聊聊JUnit 5的用法,从导包、简单Demo,到注意事项和一些小技巧

2025-04-14 0 3,586

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


1. 导入依赖(导包)

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

xml

代码解读
复制代码
<dependency>
  <groupId>org.junit.jupiter</groupId>
  <artifactId>junit-jupiter-engine</artifactId>
  <version>5.8.2</version>
  <scope>test</scope>
</dependency>

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


2. 编写Demo

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

java

代码解读
复制代码
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提供的断言方法(比如assertEqualsassertTrue等),而不要仅仅依赖打印信息来判断测试结果。

4. 使用技巧

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

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

    java

    代码解读
    复制代码
    @ParameterizedTest
    @ValueSource(ints = {2, 4, 6})
    void testEvenNumbers(int num) {
        Assertions.assertEquals(0, num % 2);
    }
    

    这样就不用写多个类似的方法啦。
    citeturn0search8

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

    java

    代码解读
    复制代码
    @RepeatedTest(3)
    void repeatedTest() {
        System.out.println("这个测试会执行三次");
    }
    
  • 分组断言:使用assertAll可以把多个断言放在一块执行,这样即使有个别断言失败,也能把所有失败信息都显示出来,方便调试。例如:

    java

    代码解读
    复制代码
    @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)。
  • 掌握参数化测试、重复测试、分组断言等技巧,让测试代码更高效、更易读。

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


参考资料:
citeturn0search0
citeturn0search8
citeturn0search9

资源下载此资源仅限终身VIP下载,请先
加入VIP会员注册登录后请联系右下角在线客服充值开通会员
收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

1. JK下载官网所有资源来源于开发团队,加入会员即可下载使用!如有问题请联系右下角在线客服!
2. JK下载官方保障所有软件都通过人工亲测,为每位会员用户提供安全可靠的应用软件、游戏资源下载及程序开发服务。
3. JK开发团队针对会员诉求,历经多年拥有现今开发成果, 每款应用程序上线前都经过人工测试无误后提供安装使用,只为会员提供安全原创的应用。
4. PC/移动端应用下载后如遇安装使用问题请联系右下角在线客服或提交工单,一对一指导解决疑难。

JK软件下载官网 技术分享 聊聊JUnit 5的用法,从导包、简单Demo,到注意事项和一些小技巧 https://www.jkxiazai.com/4014.html

JK软件应用商店是经过官方安全认证,保障正版软件平台

常见问题
  • PC/移动端应用下载后如遇安装使用问题请联系售后技术支持或提交工单,一对一指导解决疑难。
查看详情
  • 请查看会员页面介绍,注册登录后联系右下角在线客服人工充值。
查看详情
  • 会员时效等于软件时效,终身会员可以永久使用,包含售后安装与更新迭代,充值问题请联系右下角在线客服。
查看详情
  • JK下载官方保障所有软件都通过人工亲测,为每位会员用户提供安全可靠的应用软件、游戏资源下载及程序开发服务。
查看详情
  • 会员充值承诺使用过程出现问题且没有及时解决或无效,描述不一致等均支持全额退款。
查看详情
  • 充值终身会员可享一次免费应用开发要求,需会员提前准备好完整应用功能需求文档,限编译所需工时不超24小时。
查看详情

相关资源

官方客服团队

为您解决烦忧 - 24小时在线 专业服务