JUnit5 旨在适应 Java8 编码风格,并且比 JUnit4 更加健壮和灵活。在本篇文章 JUnit5 vs JUnit4 中,我们将重点介绍 JUnit4 和 JUnit5 之间的一些主要区别。
两个版本中的大多数注解都相同,但几乎没有区别。 这是一个快速比较。
| 特性 | JUnit4 | JUnit5 |
|---|---|---|
| 声明测试方法 | @Test |
@Test |
| 在当前类中的所有测试方法之前执行 | @BeforeClass |
@BeforeAll |
| 在当前类中的所有测试方法之后执行 | @AfterClass |
@AfterAll |
| 在每种测试方法之前执行 | @Before |
@BeforeEach |
| 在每种测试方法之后执行 | @After |
@AfterEach |
| 禁用测试方法/类 | @Ignore |
@Disabled |
| 进行动态测试的测试工厂 | 不适用 | @TestFactory |
| 嵌套测试 | NA | @Nested |
| 标记和过滤 | @Category |
@Tag |
| 注册自定义扩展 | NA | @ExtendWith |
JUnit4 将所有内容捆绑到单个 jar 文件中。
JUnit5 由 3 个子项目组成,即 JUnit Platform,JUnit Jupiter 和 JUnit Vintage。
-
它定义了
TestEngineAPI,用于开发在平台上运行的新测试框架。 -
它具有所有新的 junit 注解和
TestEngine实现,以运行使用这些注解编写的测试。 -
为了支持在 JUnit5 平台上运行 JUnit 3 和 JUnit4 书面测试。
JUnit4 需要 Java 5 或更高版本。
JUnit5 需要 Java8 或更高版本。
在 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)在 JUnit4 中,org.junit.Assume包含一些方法,用于陈述有关测试有意义的条件的假设。 它具有以下五种方法:
assumeFalse()assumeNoException()assumeNotNull()assumeThat()assumeTrue()
在 JUnit5 中,org.junit.jupiter.api.Assumptions 包含一些方法,用于陈述有关测试有意义的条件的假设。 它具有以下三种方法:
assumeFalse()assumingThat()assumeTrue()
在 JUnit4 中,使用@category注解。
在 JUnit5 中,使用@tag注解。
在 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
{
}在 JUnit4 中,不支持对第三方插件和 IDE 的集成。 他们必须依靠反射。
JUnit5 为此有专门的子项目,即 JUnit Platform。 它定义了TestEngine API,用于开发在平台上运行的测试框架。
请在评论部分中对 JUnit5 和 JUnit4 之间的比较发表您的看法。
学习愉快!