JUnit5 与 JUnit4

JUnit5 与 JUnit4

原文: https://howtodoinjava.com/junit5/junit-5-vs-junit-4/

JUnit5 旨在适应 Java8 编码风格,并且比 JUnit4 更加健壮和灵活。在本篇文章 JUnit5 vs JUnit4 中,我们将重点介绍 JUnit4 和 JUnit5 之间的一些主要区别。

1. JUnit5 与 JUnit4 – 注解

两个版本中的大多数注解都相同,但几乎没有区别。 这是一个快速比较。

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

2. JUnit5 和 JUnit4 之间的其他区别

2.1 架构

JUnit4 将所有内容捆绑到单个 jar 文件中。

JUnit5 由 3 个子项目组成,即 JUnit Platform,JUnit Jupiter 和 JUnit Vintage。

  1. JUnit 平台

    它定义了TestEngine API,用于开发在平台上运行的新测试框架。

  2. JUnit Jupiter

    它具有所有新的 junit 注解和TestEngine实现,以运行使用这些注解编写的测试。

  3. JUnit Vintage

    为了支持在 JUnit5 平台上运行 JUnit 3 和 JUnit4 书面测试。

2.2 所需的 JDK 版本

JUnit4 需要 Java 5 或更高版本。

JUnit5 需要 Java8 或更高版本。

2.3 断言

在 JUnit4 中,org.junit.Assert具有所有肯定的方法来验证预期结果和结果。 他们接受错误消息的额外参数作为方法签名中的第一个参数。 例如:

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

在 JUnit5 中,org.junit.jupiter.Assertions包含大多数断言方法,包括其他assertThrows()assertAll()方法。 到目前为止,assertAll()处于实验状态,用于分组断言。

JUnit5 断言方法还具有重载方法,以在测试失败(例如测试失败)时支持传递要打印的错误消息。

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 假设

在 JUnit4 中,org.junit.Assume包含一些方法,用于陈述有关测试有意义的条件的假设。 它具有以下五种方法:

  1. assumeFalse()
  2. assumeNoException()
  3. assumeNotNull()
  4. assumeThat()
  5. assumeTrue()

在 JUnit5 中,org.junit.jupiter.api.Assumptions 包含一些方法,用于陈述有关测试有意义的条件的假设。 它具有以下三种方法:

  1. assumeFalse()
  2. assumingThat​()
  3. assumeTrue()

2.5 标记和过滤

在 JUnit4 中,使用@category注解。

在 JUnit5 中,使用@tag注解。

2.6 测试套件

在 JUnit4 中,@RunWith@Suite注解。 例如:

import org.junit.runner.RunWith;
import org.junit.runners.Suite;

@RunWith(Suite.class)
@Suite.SuiteClasses({
        ExceptionTest.class, 
        TimeoutTest.class
})
public class JUnit4Example 
{
}

在 JUnit5 中,@RunWith@SelectPackages@SelectClasses例如:

import org.junit.platform.runner.JUnitPlatform;
import org.junit.platform.suite.api.SelectPackages;
import org.junit.runner.RunWith;

@RunWith(JUnitPlatform.class)
@SelectPackages("com.howtodoinjava.junit5.examples")
public class JUnit5Example 
{
}

2.7 第三方整合

在 JUnit4 中,不支持对第三方插件和 IDE 的集成。 他们必须依靠反射

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

请在评论部分中对 JUnit5 和 JUnit4 之间的比较发表您的看法。

学习愉快!