JUnit 5与JUnit 4

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

1。 JUnit 5与JUnit 4 –注解

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

特征 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由3个子项目组成,即JUnit Platform,JUnit Jupiter和JUnit Vintage。

  1. JUnit平台

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

  2. JUnit木星

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

  3. JUnit复古

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

2.2。所需的JDK版本

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

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

2.3。断言

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

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

在JUnit 5中,org.junit.jupiter.Assertions包含大多数断言方法,包括附加assertThrows()assertAll()方法。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包含用于陈述有关测试有意义的条件的假设的方法。它具有以下五种方法:

  1. 假设为False()
  2. 承担NoException()
  3. 假设不为空()
  4. 假使,假设()
  5. 假设True()

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

  1. 假设为False()
  2. 假设那个()
  3. 假设True()

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 @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.how2codex.junit5.examples")
public class JUnit5Example
{
}

2.7。第三方整合

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

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

在评论部分中,将您对junit 5和junit 4的比较的想法放到我这里。

saigon has written 1445 articles

One thought on “JUnit 5与JUnit 4

Leave a Reply