当前位置: 首页 > news >正文

71、单元测试-Junit5简介

71、单元测试-Junit5简介

# JUnit 5 简介

JUnit 5 是 Java 平台上最流行的单元测试框架之一,是 JUnit 的重大升级版本,引入了许多新特性和改进,旨在提供更现代化、灵活和强大的测试体验。

## 主要组成部分

JUnit 5 由三个模块组成:

#### JUnit Platform

- **作用**:是整个 JUnit 5 的基础,定义了在 JVM 上启动测试框架的基础设施。

- **功能**:

    - 提供 TestEngine API,允许开发自定义测试框架。

    - 支持从命令行、构建工具(如 Maven、Gradle)启动测试。

    - 提供与其他测试框架的集成机制。

#### JUnit Jupiter

- **作用**:是 JUnit 5 的核心模块,包含新的编程模型和扩展模型,用于编写测试用例。

- **功能**:

    - 提供丰富的注解,如 `@Test`、`@BeforeEach`、`@AfterEach`、`@ParameterizedTest` 等。

    - 支持 Lambda 表达式和流式 API,简化测试代码编写。

    - 提供强大的断言库 `org.junit.jupiter.api.Assertions`。

#### JUnit Vintage

- **作用**:提供对 JUnit 3 和 JUnit 4 测试用例的支持,确保旧版测试可以在 JUnit 5 平台上运行。

- **功能**:通过 Vintage 引擎,兼容并执行旧版本的测试代码。

## 主要特性

#### 注解驱动

- 引入新的注解,增强测试生命周期控制,如:

    - `@BeforeEach` 和 `@AfterEach`:每个测试方法前后执行。

    - `@BeforeAll` 和 `@AfterAll`:所有测试方法前后执行一次。

    - `@DisplayName`:为测试类或方法提供自定义名称。

#### 参数化测试

- 支持使用不同的参数多次运行同一个测试方法,简化复杂测试场景。

- 提供 `@ParameterizedTest` 注解,结合 `@ValueSource`、`@CsvSource`、`@MethodSource` 等注解定义参数来源。

#### 动态测试

- 允许在运行时动态生成测试用例。

- 使用 `JUnit Jupiter` 的 `DynamicTest` 类创建动态测试。

#### 条件测试执行

- 根据特定条件决定是否执行测试方法。

- 提供 `@EnabledIf`、`@DisabledIf`、`@EnabledOnOs`、`@DisabledOnOs` 等注解,实现条件控制。

#### 扩展模型

- 提供丰富的扩展点,允许自定义测试执行流程、报告生成等。

- 支持编写自定义扩展,实现特定需求。

## 环境配置

#### Maven 项目

在 `pom.xml` 中添加依赖:

```xml

<dependencies>

    <dependency>

        <groupId>org.junit.jupiter</groupId>

        <artifactId>junit-jupiter-api</artifactId>

        <version>5.8.2</version>

        <scope>test</scope>

    </dependency>

    <dependency>

        <groupId>org.junit.jupiter</groupId>

        <artifactId>junit-jupiter-engine</artifactId>

        <version>5.8.2</version>

        <scope>test</scope>

    </dependency>

</dependencies>

```

#### Gradle 项目

在 `build.gradle` 中添加依赖:

```groovy

dependencies {

    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2'

    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2'

}

```

## 示例

```java

import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertEquals;

public class CalculatorTest {

    @Test

    void testAddition() {

        Calculator calculator = new Calculator();

        int result = calculator.add(2, 3);

        assertEquals(5, result, "2 + 3 should equal 5");

    }

    @ParameterizedTest

    @ValueSource(ints = {1, 2, 3})

    void testMultiplication(int a) {

        Calculator calculator = new Calculator();

        int result = calculator.multiply(a, a);

        assertEquals(a * a, result, a + " * " + a + " should equal " + a * a);

    }

}

```

## 总结

JUnit 5 通过模块化设计、丰富的注解和扩展机制,提供了更灵活、强大的单元测试功能,提高了测试代码的可读性和可维护性,是 Java 开发中进行单元测试的首选框架。

http://www.lqws.cn/news/468901.html

相关文章:

  • Transformer架构每层详解【代码实现】
  • 使用Trae编辑器与MCP协议构建高德地图定制化服务
  • 【unity】批量剔除图片四周空白像素的工具
  • 深入Java大厂面试:从Spring框架到微服务架构的技术解析
  • python web开发-Flask数据库集成
  • 深度剖析 PACK_SESSIONID 实现原理与安全突破机制
  • 分组交换比报文交换的传输时延更低
  • 深入剖析Linux epoll模型:从LT/ET模式到EPOLLONESHOT的实战指南
  • 【Linux】线程概念 分页式存储 优缺点
  • 开源Blazor界面组件库:Ant Design Blazor
  • 【全开源】填表问卷统计预约打卡表单系统+uniapp前端
  • ESP32 ESP-IDF Ubuntu平台工具链的标准设置
  • 百度萝卜快跑携4颗禾赛激光雷达进军迪拜,千辆L4无人车开启全球化战略
  • 华为云Flexus+DeepSeek征文 | AingDesk 对接华为云 ModelArts Studio 全流程教程与性能测评对比
  • 基于 Flutter+Sqllite 实现大学个人课表助手 APP(期末作业)
  • 【Docker 08】Compose - 容器编排
  • 【AGI】突破感知-决策边界:VLA-具身智能2.0
  • Node.js特训专栏-实战进阶:5. Express路由系统设计与优化
  • [幻灯片]分析设计高阶-02结构05-202506更新-GJ-002
  • 【Memory协议栈】Autosar架构下如何测量Fee的切页时间
  • Qthread应用
  • Taro 跨端应用性能优化全攻略:从原理到实践
  • verilog HDLBits刷题“Module addsub”--模块 addsub---加法器-减法器
  • leetcode 3085. 成为 K 特殊字符串需要删除的最少字符数 中等
  • 实现自动化资源调度与弹性伸缩
  • AWS RDS/Aurora 开启 Database Insights 高级模式全攻略
  • Android 终端模拟器 termux app
  • C++ 第一阶段项目二:温度转换工具
  • ubuntu24.4 + ros2 jazzy 安装gazebo
  • 冰箱压缩机电机驱动板【IPM部分】