JUnit5 与 JUnit4
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。
-
JUnit 平台
它定义了
TestEngine
API,用于开发在平台上运行的新测试框架。 -
JUnit Jupiter
它具有所有新的 junit 注解和
TestEngine
实现,以运行使用这些注解编写的测试。 -
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
包含一些方法,用于陈述有关测试有意义的条件的假设。 它具有以下五种方法:
assumeFalse()
assumeNoException()
assumeNotNull()
assumeThat()
assumeTrue()
在 JUnit5 中,org.junit.jupiter.api.Assumptions
包含一些方法,用于陈述有关测试有意义的条件的假设。 它具有以下三种方法:
assumeFalse()
assumingThat()
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 之间的比较发表您的看法。
学习愉快!