JUnit5单元测试框架的使用教程与简单实例

本文详细介绍了JUnit5的使用教程,包括JUnit5的结构、安装配置、注解使用及断言方法,通过一个IDEA中的实例展示了如何进行单元测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  SpringBoot 单元测试,系列文章:

《SpringBoot使用JUnit5实现单元测试》

《JUnit5单元测试框架的使用教程与简单实例》

《SpringBoot使用MockMvc对Controller层进行单元测试》

1、JUnit5 的使用教程

1.1 简介

JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个。 JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。

JUnit5旨在调整java8样式的编码,并且比JUnit4更强大和灵活。

什么是Junit5

JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage

这看上去比Junit4 复杂,实际上在导入包时也会复杂一些。

JUnit Platform:是在JVM上启动测试框架的基础。

JUnit Jupiter:是JUnit5扩展的新的编程模型和扩展模型,用来编写测试用例。Jupiter子项目为在平台上运行Jupiter的测试提供了一个TestEngine (测试引擎)。

JUnit Vintage:提供了一个在平台上运行JUnit 3和JUnit 4的TestEngine 。

1.2 安装

这里使用Maven进行安装,pom.xml配置文件如下:

<dependencies>
    <!-- JUnit5单元测试框架 -->
    <dependency>
        <groupId>org.junit.platform</groupId>
        <artifactId>junit-platform-launcher</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.vintage</groupId>
        <artifactId>junit-vintage-engine</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

1.3 JUnit5 注解

所有支持的注解都在包 org.junit.jupiter.api 下;

使用@Test、@TestTemplate、@RepeatedTest、@BeforeAll、@AfterAll、@BeforeEach或@AfterEach注释的方法不能返回值。

注解说明
@Test表示方法是测试方法。与JUnit 4的@Test注释不同,这个注释不声明任何属性,因为JUnit Jupiter中的测试扩展基于它们自己的专用注释进行操作。 
@ParameterizedTest表示方法是参数化测试。
@RepeatedTest表示方法是重复测试的测试模板。
@TestFactory表示方法是动态测试的测试工厂。
@TestInstance用于为带注释的测试类配置测试实例生命周期。
@TestTemplate表示方法是为测试用例设计的模板,根据注册提供程序返回的调用上下文的数量进行多次调用。
@DisplayName声明测试类或测试方法的自定义显示名称。
@BeforeEach表示在当前类中每个@Test、@RepeatedTest、@ParameterizedTest或@TestFactory方法之前执行注释的方法;类似于JUnit 4的@Before。
@AfterEach表示在当前类中的每个@Test、@RepeatedTest、@ParameterizedTest或@TestFactory方法之后,都应该执行带注释的方法;类似于JUnit 4的@After。
@BeforeAll表示应在当前类中的所有@Test、@RepeatedTest、@ParameterizedTest和@TestFactory方法之前执行带注释的方法;类似于JUnit 4的@BeforeClass。
@AfterAll表示在当前类中,所有@Test、@RepeatedTest、@ParameterizedTest和@TestFactory方法都应该执行注释的方法;类似于JUnit 4的@AfterClass。
@Nested表示带注释的类是一个嵌套的、非静态的测试类。@BeforeAll和@AfterAll方法不能直接在 @Nested 测试类中使用,除非使用“每个类”测试实例生命周期。
@Tag用于在类或方法级别声明过滤测试的标记;类似于TestNG中的测试组或JUnit 4中的类别。
@Disabled用于禁用测试类或测试方法;类似于JUnit 4的@Ignore。
@ExtendWith用于注册自定义扩展。

1.4 JUnit5 与 JUnit4 注释的比较

两个版本中的大多数注释都是相同的,但很少有区别。这是一个快速比较。

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

1.5 JUnit5 断言(Assertions类)

JUnit Jupiter附带了许多JUnit 4拥有的断言方法,并添加了一些可以很好地用于Java 8 lambdas的断言方法。 
所有JUnit5断言都是 org.junit.jupiter.api.Assertions 中的静态方法断言类。

Asser类中主要方法如下:

方法名称方法描述
assertEquals断言传入的预期值与实际值是相等的。
assertNotEquals断言传入的预期值与实际值是不相等的。
assertArayEquals断言传入的预期数组与实际数组是相等的。
assertNull断言传入的对象是为空。
assertNotNull断言传入的对象是不为空。
assertTrue断言条件为真。
assertFalse断言条件为假。
assertSame断言两个对象引用同一个对象,相当于"==”。
assertNotSame断言两个对象引用不同的对象,相当于"!=”。
assertThat断言实际值是否满足指定的条件。

注意:上面的每一 个方法, 都有对应的重载方法,可以在前面加一个String类型的参数,表示如果断言失败时的提示。

推荐教程:

推荐JUnit5使用教程:《JUnit5入门系列教程》(作者:叶止水)。

2、JUnit5 的简单实例

【实例】在IDEA开发工具中,中使用JUnit5实现一个简单的测试实例。

IDEA开发工具默认已经安装好了JUnit插件,如下图:

如果没有安装JUnit插件,请执行安装。

(1)编写pom.xml配置文件,引入JUnit5所需的jar包。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.pjb.mvnbook</groupId>
    <artifactId>hello-world</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <!-- JUnit5单元测试框架 -->
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-launcher</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.vintage</groupId>
            <artifactId>junit-vintage-engine</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>

(2)创建HelloWorld.java类,该类是被测试的对象。

/**
 * 业务类
 * @author pan_junbiao
 **/
public class HelloWorld
{
    public String sayHello()
    {
        return "您好,欢迎访问 pan_junbiao的博客";
    }

    public static void main(String[] args)
    {
        System.out.println(new HelloWorld().sayHello());
    }
}

(3)创建测试类。

创建测试类的方法一:

选择需要被测试的类,点击鼠标右键(弹出菜单)→ Go To → Test。

创建测试类的方法二:

选择需要被测试的类,使用快捷键: Ctrl + Shift + T

在弹出的Create Test窗口中,输入相关测试类信息,并勾选需要被测试的方法。

编写测试代码:

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;

/**
 * 使用JUnit5进行测试类
 * @author pan_junbiao
 **/
class HelloWorldTest
{
    @BeforeEach
    void setUp()
    {
        System.out.println("@BeforeEach,测试开始");
    }

    @AfterEach
    void tearDown()
    {
        System.out.println("@AfterEach,测试结束");
    }

    @Test
    void sayHello()
    {
        HelloWorld helloWorld = new HelloWorld();
        String result = helloWorld.sayHello();
        System.out.println(result);
        assertEquals("您好,欢迎访问 pan_junbiao的博客",result);
    }
}

执行结果:

3、SpringBoot 使用 JUnit5 实现单元测试

在 Spring Boot 应用程序中使用 JUnit5 进行单元测试是一种常见的做法,它可以帮助你确保代码的正确性和稳定性。

详细的使用方法,请点击浏览文章:《SpringBoot使用JUnit5实现单元测试》

JUnit 5Java的一个流行的单元测试框架,它提供了现代和简洁的API,以及更好的支持测试驱动开发(TDD)和行为驱动开发(BDD)。如果你想开始使用JUnit 5进行单元测试,以下是下载和设置的基本步骤: 1. **下载JUnit 5**: - 最简单的方法是通过Maven或Gradle集成。如果你的项目使用Maven,可以在`pom.xml`文件中添加依赖: ```xml <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <version>5.X.Y</version> <!-- 更新到最新版本 --> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>5.X.Y</version> </dependency> ``` - 如果你使用Gradle,可以在`build.gradle`文件中添加: ```groovy implementation 'org.junit.jupiter:junit-jupiter-api:5.X.Y' testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.X.Y' ``` - JUnit 5的官方网站上也有直接下载jar包的选项,但推荐使用依赖管理工具。 2. **添加测试类**: 创建一个新的测试类,通常命名为`YourTestClass.java`,并使用`@RunWith(JUnitPlatform.class)`注解标记为JUnit 5测试类,例如: ```java import org.junit.jupiter.api.Test; @RunWith(JUnitPlatform.class) public class YourTestClass { // 测试方法 @Test void testMethod() { // 测试代码 } } ``` 3. **运行测试**: - 使用Maven的`mvn test`命令或者Gradle的`./gradlew test`命令运行所有测试。 - 如果你想运行单个测试,可以用`-Dtest=YourTestClass#testMethod`参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pan_junbiao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值