Spring Boot中JUnit 4与JUnit 5的如何共存

news/2024/11/15 4:23:55/

文章目录

  • 前言
  • 一、先上答案
  • 二、稍微深入了解
    • 2.1 maven-surefire-plugin是什么
    • 2.2 JUnit4和JUnit5有什么区别
      • 2.2.1 不同的注解
      • 2.2.2 架构


前言

在maven项目中,生成单测时是否有这样的疑问:该选JUnit4还是JUnit5?在执行 mvn test 命令时有没有遇到过有些用例执行不到的情况?如果有,那你是来着了!
在这里插入图片描述


一、先上答案

如果你用的maven-surefire-plugin插件是2.19.1版本:

 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>mygroup</groupId><artifactId>minimal-conf-junit4-5</artifactId><version>0.0.1-SNAPSHOT</version><properties><!-- JUnit 5 depends on JDK 1.8 --><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><!--  JUnit dependency versions --><junit.version>4.12</junit.version><junit-vintage-engine>4.12.1</junit-vintage-engine><junit-jupiter.version>5.0.1</junit-jupiter.version><junit-platform.version>1.0.1</junit-platform.version></properties><dependencies><!--JUnit Jupiter API to write and compile tests with JUnit5 --><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>${junit-jupiter.version}</version><scope>test</scope></dependency><!-- JUnit 4 to make legacy JUnit 4 tests compile --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit.version}</version><scope>test</scope></dependency></dependencies><build><plugins><plugin><artifactId>maven-surefire-plugin</artifactId><version>2.19.1</version> <!-- matters until now--><dependencies><!-- to let surefire to run JUnit 4 but also JUnit 5 tests --><dependency><groupId>org.junit.platform</groupId><artifactId>junit-platform-surefire-provider</artifactId><version>${junit-platform.version}</version></dependency><!-- JUnit vintage engine to run JUnit 3 or JUnit 4 tests --><dependency><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId><version>${junit-vintage-engine}</version></dependency><!-- JUnit 5 engine to run JUnit 5 tests --><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-engine</artifactId><version>${junit-jupiter.version}</version></dependency></dependencies></plugin></plugins></build>
</project>

如果你用的maven-surefire-plugin插件是2.22.0版本:

 <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>david</groupId><artifactId>jupiter-4-and-5-same-build</artifactId><version>0.0.1-SNAPSHOT</version><properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><junit-jupiter.version>5.1.0</junit-jupiter.version><!-- optional : if we want to use a junit4 specific version --><junit.version>4.12</junit.version></properties><dependencies><!--JUnit Jupiter Engine to depend on the JUnit5 engine and JUnit 5 API --><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-engine</artifactId><version>${junit-jupiter.version}</version><scope>test</scope></dependency><!--JUnit Jupiter Engine to depend on the JUnit4 engine and JUnit 4 API  --><dependency><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId><version>${junit-jupiter.version}</version></dependency><!-- Optional : override the JUnit 4 API version provided by junit-vintage-engine --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit.version}</version><scope>test</scope></dependency></dependencies><build><plugins><plugin><artifactId>maven-surefire-plugin</artifactId><version>2.22.0</version></plugin></plugins></build></project>

二、稍微深入了解

2.1 maven-surefire-plugin是什么

Maven是一个项目管理工具,主要用于Java项目的构建和管理。在Maven中,插件是用于扩展其功能的组件。maven-surefire-plugin是其中一个常用的插件,主要用于执行单元测试

maven-surefire-plugin可以与JUnit和TestNG等单元测试框架集成,通过在构建过程中自动运行测试用例,帮助开发者确保代码的质量和正确性。它可以很好地兼容JUnit 3、JUnit 4以及TestNG,使得开发者可以根据自己的需求选择合适的测试框架。
默认情况下,maven-surefire-plugin会自动执行测试源码路径(默认为src/test/java/)下所有符合一组命名模式的测试类。这组模式包括:

  • /Test.java:任何子目录下所有命名以Test开头的Java类。
  • /Test.java:任何子目录下所有命名以Test结尾的Java类。
  • /TestCase.java:任何子目录下所有命名以TestCase结尾的Java类

知道他是用来跑单测的就行了

2.2 JUnit4和JUnit5有什么区别

2.2.1 不同的注解

大部分注解在JUnit4和JUnit5中都是一样的,但是有些是不一样的,来快速对比一下:

特性JUnit4JUnit5
声明一个测试方法@Test@Test
在当前类的所有测试方法执行前要执行的方法@BeforeClass@BeforeAll
在当前类的所有测试方法执行后要执行的方法@AfterClass@AfterAll
每个测试方法执行前要执行的方法@Before@BeforeEach
每个测试方法执行后要执行的方法@After@AfterEach
忽略某个测试方法或测试类@Ignore@Disabled
动态测试用例生成工厂无此特性@TestFactory
嵌套测试无此特性@Nested
标记与过滤@Category@Tag
注册定制扩展点无此特性@ExtendWith

2.2.2 架构

JUnit4把所有的代码都打包到一个jar包。
JUnit5由三个子项目构成:JUnit平台(JUnit Platform),JUnit Jupiter和JUnit Vintage。

  • JUnit Platform:它定义了测试引擎(TestEngine)API,用于开发运行在JUnit平台上面的新的测试框架。
  • JUnit Jupiter:它拥有所有的新的JUnit注解和测试引擎的实现(Implementation),这个测试引擎的实现能够测试使用新注解开发的测试代码。
  • JUnit Vintage:用于支持在JUnit5平台上运行JUnit3和JUnit4编写的测试用例
    在这里插入图片描述

参考:https://blog.csdn.net/lzufeng/article/details/127521842


http://www.ppmy.cn/news/1431085.html

相关文章

python--使用pika库操作rabbitmq实现需求

Author: wencoo Blog&#xff1a;https://wencoo.blog.csdn.net/ Date: 22/04/2024 Email: jianwen056aliyun.com Wechat&#xff1a;wencoo824 QQ&#xff1a;1419440391 Details:文章目录 目录正文 或 背景pika链接mqpika指定消费数量pika自动消费实现pika获取队列任务数量pi…

【JavaEE网络】计算机网络发展及通信基础详解

目录 网络发展史独立模式网络互连局域网广域网 网络通信基础IP地址端口号认识协议五元组协议分层网络数据传输 网络发展史 独立模式 独立模式&#xff1a;计算机之间相互独立。 网络互连 网络互连&#xff1a;将多台计算机连接在一起&#xff0c;完成数据共享。 数据共享本…

森林保镖:了解森林防火杆!/恒峰智慧科技

在茂密的森林中&#xff0c;火势一旦失控&#xff0c;后果将不堪设想。为了保护森林资源和生态环境&#xff0c;森林防火工作显得尤为重要。而森林防火杆作为一种新型的森林防火设备&#xff0c;正逐渐成为森林防火的重要保障。本文将为您详细介绍森林防火杆的功能和特点。 一、…

OpenHarmony开发实例:【 待办事项TodoList】

简介 TodoList应用是基于OpenHarmony SDK开发的安装在润和HiSpark Taurus AI Camera(Hi3516d)开发板标准系统上的应用&#xff1b;应用主要功能是以列表的形式&#xff0c;展示需要完成的日程&#xff1b;通过本demo可以学习到 JS UI 框架List使用&#xff1b; 运行效果 样例…

【k8s】集群安装 Jenkins(一):实现持续集成与持续交付

【k8s】集群安装 Jenkins(一):实现持续集成与持续交付 一、 准备工作二、安装 Jenkins2.1 设置NFS共享目录2.2 创建名称空间2.3 创建持久化卷和声明2.4 创建sa账号2.5 对sa账号授权2.6 通过Deployment方式部署Jenkins2.7 查看Jenkins是否创建成功2.8 创建Jenkins-service三、…

学习STM32第十六天

RTC实时时钟 一、简介 RTC是一个独立的BCD格式定时器&#xff0c;提供一个时钟日历&#xff0c;两个可编程报警中断&#xff0c;一个具有中断功能周期性可编程唤醒标志&#xff0c;RTC和时钟配置系统处于后备区域。 通过两个32位寄存器以BCD格式实现秒、分钟、小时&#xff08…

stm32HAL_GPIO输入

学会使用 GPIO 采集 KEY 的数据信息&#xff0c;这种信息采集技术在生活中常见于对大自 然环境的各种信息的采集。比如环境温度&#xff0c;湿度等等。我们这里以 key 为入门设 备。 一&#xff0c;什么是信息采集 比如环境温度&#xff0c;湿度等等。我们需要把这些温度&am…

.net core webapi 添加日志管理看板LogDashboard

.net core webapi 添加日志管理看板LogDashboard 添加权限管理&#xff1a; 我们用的是Nlog文件来配置 <?xml version"1.0" encoding"utf-8" ?> <nlog xmlns"http://www.nlog-project.org/schemas/NLog.xsd"xmlns:xsi"http:/…