JUnit 5 初学者指南

JUnit 5是开发人员用来对其代码进行单元测试的软件测试框架。它是一个基于Java的框架,允许在Java平台上编写和运行测试,包括一个集成的报告器显示测试结果。

JUnit可用于自动化测试,主要有两个目的:

  1. 测试软件是否按预期工作
  2. 找出并报告代码中的错误,并尽快修复

在本博客中,我们将重点关注并学习JUnit 5中使用的设置、配置和基本方法。

什么是JUnit 5?

JUnit 5是JUnit测试框架的最新版本。它支持Java 8及更高版本,适应不同的测试风格,并为JVM上的开发者端测试提供了现代基础。

使用JUnit的主要好处在于其模块化,因为它包含多个模块,让开发人员可以轻松测试软件的不同组件。它还可以用来测试应用程序的单个类,而不是整个应用程序。

JUnit 5的特点

以下是一些区分JUnit 5与其他单元测试框架的流行和重要特点。

Feature Description Annotations/Method
测试套件

测试套件基本上是一组测试,例如烟雾测试、健全性测试或与特定功能相关的一组测试。

JUnit 5 允许创建可以一起运行的测试套件。

要使用测试套件,我们需要添加一个 JUnit 平台套件 依赖,并使用以下注解。
@SelectPackages,
@SelectClasses, @Suite
断言 断言用于验证软件的预期行为。JUnit 5 提供了内置的断言方法,可以帮助轻松执行断言。 import org.junit.jupiter.api.Assertions; 类中有多种可用的断言方法。
一些方法如下所示:
assertTrue(), assertFalse(),
assertEquals(), assertAll(), assertNotEquals()
测试执行顺序 自定义测试执行顺序。它允许开发人员控制测试执行,并按需以特定顺序运行测试。 @TestMethodOrder, @Order,
@TestClassOrder
异常测试 执行异常测试,验证所需的异常是否被抛出到测试中。 以下方法从
import org.junit.jupiter.api.Assertions;
类中使用:
assertThrows()
测试依赖 测试依赖允许通过提供测试方法相互依赖的功能来进行顺序测试。这意味着下一个依赖于前一个测试方法的测试方法只有在前一个测试通过时才会被执行。这在编写集成测试时是一个有用的功能。 @TestInstance
禁用测试 禁用测试或测试类。 @Disabled
超时 如果测试执行时间超过指定持续时间,将导致测试失败。 @Timeout
报告 提供内置报告生成器来分析测试结果并显示详细信息。生成一个.html文件,其中包含测试执行结果。 N/A

JUnit 4与JUnit 5

随着最新版本JUnit 5的发布,框架中添加了多个变化和新功能。下表列出了这两个版本之间的区别:

criteria JUNIT4 JUNIT5
架构 所有内容都打包在一个单独的JAR文件中。 分为3个子项目:
– JUnit平台
– JUnit Jupiter
– JUnit Vintage
JDK版本要求 需要Java 5或更高版本 需要Java 8或更高版本
第三方集成 插件和IDE不支持第三方集成 专门的子项目(JUnit平台)用于第三方集成
支持嵌套测试 没有提供用于编写嵌套测试的注解 提供@Nested注解来编写嵌套测试
支持注册自定义扩展 不支持自定义扩展 提供@ExtendWith注解来注册自定义扩展
对常用注解所做的更改 @BeforeClass
@AfterClass
@Before
@After
@Ignore
@BeforeAll
@AfterAll
@BeforeEach
@AfterEach
@Disabled
用于标记和过滤的注解更改 @Category注解已被使用 @Tag注解已被使用
测试套件 @RunWith@Suite注解已被使用 @Suite@SelectPackages@SelectClasses 注解用于

开始使用 JUnit 5

在本节中,我们将学习如何使用 IntelliJ IDE 编写 JUnit 5 测试用例。由于它已经捆绑了 JUnit 5,我们不需要额外进行任何安装即可使用它。

我们需要创建一个新的 Maven 项目,添加 JUnit 5 依赖项,并立即开始编写测试。

在 Maven 项目中添加 JUnit 依赖项

以下 JUnit 5 依赖项需要添加到 pom.xml 文件中:

  • JUnit Jupiter 引擎
  • JUnit Jupiter API
  • JUnit 平台套件(聚合器)
  • JUnit Jupiter 参数
XML

 

以下是完整的 pom.xml 文件

XML

 

添加依赖项后,我们可以开始编写测试了。但是,在我们继续使用 JUnit 5 编写测试之前,首先让我们了解一些基本注解,这些注解可以帮助我们有效地设置测试套件并按需运行测试。

JUnit 5 中使用的基本注解

以下是开发人员在使用 JUnit 5 编写测试时最常用的基本注解。

@BeforeAll 注解

@BeforeAll 注解表示注解的方法应在当前类中的任何 @Test, @RepeatedTest, @ParameterizedTest, 或 @TestFactory 方法执行之前运行。它必须是测试类中的静态方法。

@BeforeAll 是 JUnit 4.x 中使用的 @BeforeClass 注解的替代品。

语法:

Java

 

@BeforeEach 注解

@BeforeEach 注解表示注解的方法应在当前类中的每个 @Test, @RepeatedTest, @ParameterizedTest, 或 @TestFactory 方法调用之前执行。

它是测试生命周期方法的一部分,并替代了 JUnit 4 中使用的 @Before 注解。

语法:

Java

 

@AfterAll 注解

@AfterAll 注解表示注解的方法应在当前类中的所有测试执行完毕后调用。它必须是一个静态方法,并用作测试类中的拆解方法。

@AfterAll 注解是 JUnit 4 中 @AfterClass 注解的替代品。

语法:

Java

 

@AfterEach 注解

@AfterEach 注解表示注解的方法应在当前类中的每个 @Test, @RepeatedTest, @ParameterizedTest, 或 @TestFactory 方法执行之后运行。

它作为JUnit 5中替代JUnit 4中使用的@After注解的功能。

语法:

Java

 

@Test注解

@Test注解表示被注解的方法是一个测试方法。测试方法不得是私有或静态方法,并且不得返回值。

语法:

Java

 

@DisplayName注解

@DisplayName注解用于为被注解的测试类或方法指定一个自定义名称。这些自定义名称可以包含空格、特殊字符,甚至是表情符号,通常在IDE和构建工具生成的测试报告中使用。

语法:

Java

 

@Disabled注解

JUnit 5中的@Disabled注解用于从测试套件中排除测试方法或测试类的执行。

当应用于测试类时,该测试类中的所有方法都被自动视为禁用。此注解具有一个可选参数,允许指定禁用测试的原因。

语法:

Java

 

如何使用JUnit 5编写自动化测试用例

是时候进入代码,开始使用JUnit 5进行实际操作了。我们将创建一个新的Java类,BasicTest

Java

 


我们讨论过的所有基本注解将作为演示的一部分进行覆盖。

让我们在 BasicTest 类中添加方法,以演示 JUnit 5 中可用的 @BeforeAll@BeforeEach@AfterAll@AfterEach@Test@DisplayName@Disabled 注解的用法。

Java

 

代码演示

测试类上的 @DisplayName 注解将在执行测试时将测试名称显示为“演示测试类”。

beforeAllTest() 方法将在任何测试运行之前执行,并打印文本 “Before All method Called!!”。接下来,beforeEachTest() 方法将在每个测试之前执行,并打印文本“Before Each Method called!!”

此类中有三个测试方法,分别是 testMethodOne()testMethodTwo()disabledTest()所有三个测试方法上都有@Test 注解,表示这些是测试方法。

disabledTest() 方法不会被执行,因为它具有放置在上方的 @Disabled 注解。

每次测试执行完成后,afterEachTestMethod() 将被执行,因为它具有放置在上方的 @AfterEach 注解。

最后,在所有测试运行完毕后,afterAllMethod() 将被执行,因为它具有放置在上方的 @AfterAll 注解。

测试执行

测试可以通过右键单击测试类并选择“运行‘<测试类名称>’(在我们的案例中是“BasicTest”)”来执行。

另一种方法是单击测试类声明旁边的绿色播放图标,如下面的屏幕截图所示:



以下来自IntelliJ IDE的屏幕截图显示测试已成功执行。

可以在上述屏幕截图中看到测试类的显示名称已被打印出来,还可以看到禁用的测试以及禁用测试的原因已在控制台中打印出来。

除了beforetestaftertest之外的所有测试方法都已成功执行,并且相应的结果已在控制台上打印出来。

概要

JUnit 5是开发人员用于执行代码单元测试的强大测试框架。测试自动化工程师也使用它来编写和运行测试自动化脚本。它具有丰富的功能,允许开发人员和测试人员编写测试脚本并执行代码的单元测试。

它还提供多种方法来执行断言和验证,这在编写自动化测试时非常方便。除了编写和运行测试脚本之外,它还提供了测试报告,可用于向利益相关者展示测试执行结果,展示测试覆盖率。

快乐测试!

Source:
https://dzone.com/articles/beginners-guide-to-junit-5