行业资讯 2025年08月6日
0 收藏 0 点赞 599 浏览 2611 个字
摘要 :

文章目录 1.不同的注解 2.JUnit 5和JUnit 4之间的更多区别 2.1架构 2.2 所需的JDK版本 2.3 断言 2.4. 假设 2.5 标记和过滤 2.6 测试套件 2.7 允许非公共测试方法 2.8第……




  • 1.不同的注解
  • 2.JUnit 5和JUnit 4之间的更多区别
    • 2.1架构
    • 2.2 所需的JDK版本
    • 2.3 断言
    • 2.4. 假设
    • 2.5 标记和过滤
    • 2.6 测试套件
    • 2.7 允许非公共测试方法
    • 2.8第三方集成
  • 3. 结论

JUnit 5的目标是适应Java 8的编码风格,并且比JUnit 4更健壮和灵活。在本文中,我们将重点介绍JUnit 4和JUnit 5之间的一些主要区别。

1.不同的注解

两个版本的大多数注解都是相同的,但有一些不同。这里是一个快速的比较。

特性 JUnit 4 JUnit 5
声明一个测试方法 @Test @Test
在当前类的所有测试方法之前执行 @BeforeClass @BeforeAll
在当前类的所有测试方法之后执行 @AfterClass @AfterAll
在每个测试方法之前执行 @Before @BeforeEach
在每个测试方法之后执行 @After @AfterEach
禁用一个测试方法/类 @Ignore @Disabled
动态测试的测试工厂 不适用 @TestFactory
嵌套测试 不适用 @Nested
标记和过滤 @Category @Tag
注册自定义扩展 不适用 @ExtendWith

2.JUnit 5和JUnit 4之间的更多区别

2.1架构

JUnit 4将所有内容捆绑到一个单独的jar文件中。

JUnit 5由三个子项目组成,即JUnit Platform,JUnit Jupiter和JUnit Vintage。

  • JUnit Platform:它定义了TestEngine API,用于开发新的测试框架,该框架可在平台上运行。
  • JUnit Jupiter:它具有所有新的JUnit注解和TestEngine实现,用于运行使用这些注解编写的测试。
  • JUnit Vintage:支持在JUnit 5平台上运行JUnit 3和JUnit 4编写的测试。

2.2 所需的JDK版本

JUnit 4需要Java 5或更高版本。

JUnit 5需要Java 8或更高版本。

2.3 断言

在JUnit 4中,org.junit.Assert具有所有assert方法来验证预期和结果。
它们接受额外的参数作为方法签名的第一个参数以用于错误消息。例如,

public static void assertEquals(long expected, long actual)
public static void assertEquals(String message, long expected, long actual)

在JUnit 5中,org.junit.jupiter.Assertions包含大多数assert()方法,包括额外的assertThrows()和assertAll()方法。

JUnit 5断言方法还具有重载方法来支持解析错误消息以便在测试失败时打印出来,例如:

public static void assertEquals(long expected, long actual)
public static void assertEquals(long expected, long actual, String message)
public static void assertEquals(long expected, long actual, Supplier messageSupplier)

2.4. 假设

JUnit 4中的org.junit.Assume包含用于说明测试条件有意义的方法。它具有以下五个方法:

  • assumeFalse()
  • assumeNoException()
  • assumeNotNull()
  • assumeThat()
  • assumeTrue()

JUnit 5中的org.junit.jupiter.api.Assumptions包含用于说明测试条件有意义的方法。它具有以下三个方法:

  • assumeFalse()
  • assumingThat​()
  • assumeTrue()

2.5 标记和过滤

JUnit 4中使用@Category注解。

JUnit 5中使用@Tag注解。

2.6 测试套件

JUnit 4中使用的@RunWith和@Suite注解。例如:

import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses({
        ExceptionTest.class,
        TimeoutTest.class
})
public class JUnit4Example
{
}

JUnit 5中使用的@Suite,@SelectPackages和@SelectClasses注解。例如:

import org.junit.platform.runner.JUnitPlatform;
import org.junit.platform.suite.api.SelectPackages;
import org.junit.runner.RunWith;
@Suite
@SelectPackages(\"com.howtodoinjava.junit5.examples\")
public class JUnit5Example
{
}

2.7 允许非公共测试方法

  • JUnit 5中的测试类和测试方法不需要是公共的。现在可以将它们设置为包级保护。JUnit内部使用反射来查找测试类和测试方法。即使它们具有有限的可见性,反射也可以发现它们,因此它们不需要是公共的。
  • JUnit测试类也可以具有非公共构造函数。它们甚至可以有参数。这意味着拥有一个公共的无参数构造函数在JUnit 5中不是强制性的。
class AppTest {
    private AppTest(TestInfo testInfo) {
        System.out.println(\"Working on test \" + testInfo.getDisplayName());
    }
  @Test
  void test(){
        assertTrue(true);
    }
}

2.8第三方集成

JUnit 4没有对第三方插件和IDE的集成支持。它们必须依靠反射。

JUnit 5为此定义了一个专门的子项目,即JUnit Platform。它定义了TestEngine API,用于开发在平台上运行的测试框架。

3. 结论

在本JUnit教程中,我们学习了JUnit 4和JUnit 5框架之间的重大区别以及用它们编写的测试。尽管在幕后存在许多差异,但主要区别在于JUnit 5中引入的模块化以及对第三方提供商编写自定义运行时引擎的支持。

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/9557.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

986
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

463
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

347
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

455
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

516
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

831
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号