JUnit5-单元测试操作详解

这篇具有很好参考价值的文章主要介绍了JUnit5-单元测试操作详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、JUnit5-单元测试框架

JUnit 5是JUnit测试框架的下一个主要版本,用于编写和运行单元测试。

与以前版本的 JUnit 不同,JUnit 5 由来自三个不同子项目的多个不同模块组成。

JUnit 5 = JUnit 平台JUnit Jupiter + JUnit Vintage

JUnit平台是在 JVM 上启动测试框架的基础。它还定义了TestEngine用于开发在平台上运行的测试框架的API。此外,该平台还提供了一个 控制台启动器,用于从命令行启动平台,还提供JUnit 平台套件引擎,用于使用平台上的一个或多个测试引擎来运行自定义测试套件。对 JUnit 平台的一流支持也存在于流行的 IDE(请参阅IntelliJ IDEA、 Eclipse、NetBeans和 Visual Studio Code)和构建工具(请参阅Gradle、 Maven和Ant)中。

JUnit Jupiter是编程模型和 扩展模型的组合,用于在 JUnit 5 中编写测试和扩展。Jupiter 子项目提供了TestEngine在平台上运行基于 Jupiter 的测试的功能。

JUnit Vintage提供了一个TestEngine用于在平台上运行基于 JUnit 3 和 JUnit 4 的测试。它要求类路径或模块路径上存在 JUnit 4.12 或更高版本。

2、支持的 Java 版本

JUnit 5 在运行时需要 Java 8(或更高版本)。

3、寻求帮助

在Stack Overflow上询问 JUnit 5 相关问题或在Gitter上与社区聊天。

4、下载JUnit5依赖

(1)、进入springboot官网 复制依赖:Core Features
手动触发junit5 case执行,单元测试,数据库,junit,java

(2)、粘贴到pom.xml文件中,点击maven刷新按钮,刷新成功后就新增成功了

手动触发junit5 case执行,单元测试,数据库,junit,java

5、JUnit Jupiter 支持以下注释来配置测试和扩展框架。

除非另有说明,所有核心注解均位于模块org.junit.jupiter.api中的包中junit-jupiter-api

注解 描述

@Test

表示方法是测试方法。与 JUnit 4 的@Test注释不同,此注释不声明任何属性,因为 JUnit Jupiter 中的测试扩展基于其自己的专用注释进行操作。此类方法将被继承,除非它们被重写

@ParameterizedTest

表示方法是参数化测试。此类方法将被继承,除非它们被重写

@RepeatedTest

表示方法是重复测试的测试模板。此类方法将被继承,除非它们被重写

@TestFactory

表示方法是动态测试的测试工厂。此类方法将被继承,除非它们被重写

@TestTemplate

表示方法是测试用例的模板,设计为根据注册提供者返回的调用上下文的数量多次调用。此类方法将被继承,除非它们被重写

@TestClassOrder

用于配置带注释的测试类中测试类的测试类执行顺序@Nested。此类注释是继承的

@TestMethodOrder

用于配置被注解的测试类的测试方法执行顺序;类似于 JUnit 4 的@FixMethodOrder. 此类注释是继承的

@TestInstance

用于配置带注释的测试类的测试实例生命周期。此类注释是继承的

@DisplayName

声明测试类或测试方法的自定义显示名称。此类注释不会被继承

@DisplayNameGeneration

为测试类声明一个自定义显示名称生成器。此类注释是继承的

@BeforeEach

表示被注解的方法应该在当前类中的每个, , , 或方法之前执行; 类似于 JUnit 4 的. 此类方法是继承的,除非它们被覆盖取代(即仅基于签名进行替换,而不考虑 Java 的可见性规则)。 @Test@RepeatedTest@ParameterizedTest@TestFactory@Before

@AfterEach

表示被注解的方法应该在当前类中的每个、、、 或方法之后执行; 类似于 JUnit 4 的. 此类方法是继承的,除非它们被覆盖取代(即仅基于签名进行替换,而不考虑 Java 的可见性规则)。 @Test@RepeatedTest@ParameterizedTest@TestFactory@After

@BeforeAll

表示被注解的方法应该在当前类中的所有、、、方法之前执行; 类似于 JUnit 4 的. 此类方法是继承的,除非它们被隐藏重写取代(即,仅根据签名进行替换,而不考虑 Java 的可见性规则),而且必须如此,除非使用“每类”测试实例生命周期。 @Test@RepeatedTest@ParameterizedTest@TestFactory@BeforeClassstatic

@AfterAll

表示被注解的方法应该在当前类中的所有、、、方法之后执行; 类似于 JUnit 4 的. 此类方法是继承的,除非它们被隐藏重写取代(即,仅根据签名进行替换,而不考虑 Java 的可见性规则),而且必须如此,除非使用“每类”测试实例生命周期。 @Test@RepeatedTest@ParameterizedTest@TestFactory@AfterClassstatic

@Nested

表示被注解的类是一个非静态嵌套测试类。在 Java 8 到 Java 15 上,@BeforeAll除非使用“每类”测试实例生命周期@AfterAll,否则不能直接在测试类中使用方法。从 Java 16 开始,可以使用任一测试实例生命周期模式在测试类中声明方法。此类注释不会被继承@Nested@BeforeAll@AfterAllstatic@Nested

@Tag

用于在类或方法级别声明用于过滤测试的标签;类似于 TestNG 中的测试组或 JUnit 4 中的类别。此类注释在类级别继承,但不在方法级别继承。

@Disabled

用于禁用测试类或测试方法;类似于 JUnit 4 的@Ignore. 此类注释不会被继承

@Timeout

用于在测试、测试工厂、测试模板或生命周期方法的执行超过给定持续时间时失败。此类注释是继承的

@ExtendWith

用于以声明方式注册扩展。此类注释是继承的

@RegisterExtension

用于通过字段以编程方式注册扩展。这些字段是继承的,除非它们被遮蔽

@TempDir

用于在生命周期方法或测试方法中通过字段注入或参数注入提供临时目录;位于org.junit.jupiter.api.io包装内。

6、首个示例用法如下

判断括号里 2个值是否相等

package com.example.demo;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class Demo5ApplicationTests {
   private Integer number=1+1;
        @Test
        void addition() {
            assertEquals(2,number);
            
        }

    }

断言失败展示

手动触发junit5 case执行,单元测试,数据库,junit,java

7、显示名称

package com.example.demo;

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
@DisplayName("A special test case")
@SpringBootTest
class NameTests {

    @Test
    @DisplayName("Custom test name containing spaces")
    void testWithDisplayNameContainingSpaces() {
        System.out.println("1");
    }

    @Test
    @DisplayName("╯°□°)╯")
    void testWithDisplayNameContainingSpecialCharacters() {
        System.out.println("2");
    }

    @Test
    @DisplayName("😱")
    void testWithDisplayNameContainingEmoji() {
        System.out.println("3");
    }

}

手动触发junit5 case执行,单元测试,数据库,junit,java

8、断言示例展示

package com.example.demo;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import static org.junit.jupiter.api.Assertions.*;
@SpringBootTest
class KotlinAssertionsDemo {
    @Test
    void asserts(){
     // 判断两个对象或两个原始类型是否相等
        assertEquals(3, 1 + 2, "2个结果相等");
        // 判断两个对象或两个原始类型是否不相等
        assertNotEquals(3, 1 + 1);
        // 判断两个对象引用是否指向不同的对象
        assertNotSame(new Object(), new Object());
        Object obj = new Object();
        // 判断两个对象引用是否指向相同的对象
        assertSame(obj, obj);
        //判断给定的布尔值是否为 false
        assertFalse(1 > 2);
            //判断给定的布尔值是否为 true
        assertTrue(1 < 2);
            //判断给定的布尔值是否为空
        assertNull(null);
        //   判断给定的布尔值是否不为空
        assertNotNull("hello");
    }
}

手动触发junit5 case执行,单元测试,数据库,junit,java

9、数组断言

通过 assertArrayEquals 方法来判断两个对象或原始类型的数组是否相等

   @Test
    @DisplayName("数组测试")
    public void array() {
        assertArrayEquals(new String[]{"a","b"}, new String[]{"a","b"});
         }

手动触发junit5 case执行,单元测试,数据库,junit,java

10、异常断言

在JUnit4时期,想要测试方法的异常情况时,需要用@Rule注解的ExpectedException变量还是比较麻烦的。而JUnit5提供了一种新的断言 方式Assertions.assertThrows() ,配合函数式编程就可以进行使用。

@Test
    @DisplayName("异常测试")
    public void exceptionTest() {
        ArithmeticException exception = Assertions.assertThrows(
                //扔出断言异常
                ArithmeticException.class, () -> System.out.println(1 % 0));
    }

手动触发junit5 case执行,单元测试,数据库,junit,java

11、超时断言

Junit5还提供了Assertions.assertTimeout() 为测试方法设置了超时时间为1ms

@DisplayName("超时测试")
@Test
public void timeoutTest() {
        //如果测试方法时间超过1s将会异常
        Assertions.assertTimeout(Duration.ofMillis(1000), () -> Thread.sleep(1001));
        }
}

手动触发junit5 case执行,单元测试,数据库,junit,java

12、@BeforeEach用法

在执行每个用例之前,都会执行BeforeEach下的函数  

@SpringBootTest
class WhenNew {

    @BeforeEach
    void init() {
        System.out.println("testcase");
    }

    @Test
    void succeedingTest() {
        System.out.println("test01");
    }

    @Test
    void succeedingTest1() {
        System.out.println("test02");
    }
    @Test
    void succeedingTest2() {
        System.out.println("test03");
    }


}

手动触发junit5 case执行,单元测试,数据库,junit,java

手动触发junit5 case执行,单元测试,数据库,junit,java

13、参数化测试

参数化测试是JUnit5很重要的一个新特性,它使得用不同的参数多次运行测试成为了可能,也为我们的单元测试带来许多便利。 利用@ValueSource等注解,指定入参,我们将可以使用不同的参数进行多次单元测试,而不需要每新增一个参数就新增一个单元测试, 省去了很多冗余代码。

如下:测试用例会分别执行集合类的四个参数

@ParameterizedTest
 @ValueSource(strings = {"one", "two", "three","five"})
 @DisplayName("参数化测试1")
 public void parameterizedTest1(String string)
    {
        System.out.println(string);
         Assertions.assertTrue(StringUtils.isNotBlank(string));
         }

手动触发junit5 case执行,单元测试,数据库,junit,java文章来源地址https://www.toymoban.com/news/detail-846463.html

到了这里,关于JUnit5-单元测试操作详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot2---单元测试(Junit5)(1)

    org.junit.vintage junit-vintage-engine test org.hamcrest hamcrest-core org.springframework.boot spring-boot-starter-test test 现在版本: @SpringBootTest class Boot05WebAdminApplicationTests { @Test void contextLoads() { } } 以前: @SpringBootTest + @RunWith(SpringRunner.class) SpringBoot整合Junit以后。 编写测试方法:@Test标注(注意需要

    2024年04月29日
    浏览(44)
  • SpringBoot单元测试--Mockito+Junit5框架使用

    作为程序员为了提前发现代码bug,优化代码; 通常我们写完某个功能模块代码后都需要写单元测试对代码块进行测试(特别是敏捷开发中);Java项目最常用的单元测试框架即为Junit(目前最新版本为Junit5),SpringBoot本身也整合了该框架。在写单元测试时代码块中的调到第三方接口方

    2024年02月02日
    浏览(47)
  • 静态方法 单元测试 springboot+mokito+junit5

    CodecUtils的方法是静态类,使用@InjectMocks不能有用,因为这个注解只能用于非静态的对象。 想要为静态方法写单元测试,可以使用Mockito.mockStatic(Class classToMock)方法,它可以返回一个MockedStatic对象,用于模拟静态方法的调用。 1.导入依赖 2.单元测试 可以参考如下地址,了解如何

    2024年04月25日
    浏览(48)
  • 13.Springboot整合junit5单元测试与生成单元测试覆盖率

    现在基本大公司都要求单元测试了,保证我们代码得质量,而我司更是要求覆盖率要达到60%以上,所以搞一下。 这里有两个方法: 1.使用maven自带得test,idea右侧maven模块执行项目下得test 2.使用cmd命令,在你的项目pom文件所在目录 ,打开cmd,执行如下: 结果如下:打开site文

    2024年02月16日
    浏览(40)
  • SpringBoot 实战:JUnit5+MockMvc+Mockito 做好单元测试

    因为继承了 spring-boot-starter-parent ,所以我们依赖的 spring-boot-starter-test 不需要写具体的版本,可以直接集成父级的版本定义。其中, spring-boot-starter-web 是用于提供 REST API 的 web 容器, spring-boot-starter-test 可以提供各种测试框架的, spring-boot-maven-plugin 是将 SpringBoot 应用打包为

    2024年04月15日
    浏览(54)
  • 深度揭秘JUnit5与Mockito的单元测试神秘面纱

    在今天的学习中,我们将深入研究 JUnit 和Mockito,这是 Java 开发中最强大的 单元测试 工具之一。通过学习如何编写清晰、高效的单元测试,我们将揭开单元测试的神秘面纱,助力你在项目中写出更健壮的代码。 提示: 今天的代码是在第九天代码的基础上进行开发,我们将为

    2024年02月02日
    浏览(58)
  • 单元测试junit(原始版本、Spring Boot各版本、junit5)使用介绍

    🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢迎点赞 👍 收藏 ⭐留言 📝 🍓 更多文章请点击 单元测试 junit各版本 使用介绍 官

    2023年04月16日
    浏览(44)
  • Spring Cloud中Controller单元测试 Junit5 & MockMvc

    在Spring Cloud中进行Controller的单元测试,使用Junit5和Mock。 Controller: 方式一:使用@SpringBootTest + @AutoConfigureMockMvc 方式二:使用@WebMvcTest + @ImportAutoConfiguration(RefreshAutoConfiguration.class) 解决 No Scope registered for scope name \\\'refresh\\\' 异常 注入Mockmvc方式有两种 方式一:(@AutoConfigureMockMvc / @

    2024年02月16日
    浏览(38)
  • 在 Java 中使用JUnit5进行单元测试和自动化测试

    单元测试和自动化测试是现代软件开发过程中必不可少的环节,可以提高代码质量和开发效率。JUnit5是Java中流行的单元测试框架,本文将介绍如何在Java中使用JUnit5进行单元测试和自动化测试。 2.1 单元测试的基本概念和原理 单元测试是一种测试方法,用于对软件系统中的最

    2024年02月03日
    浏览(45)
  • JUnit5单元测试提示“Not tests were found”错误

    JUnit5单元测试提示“Not tests were found”错误,如下图所示: 或者 问题解析: 1)使用@Test注解时,不能有返回值; 2)使用@Test注解时,不能使用private; 存在以上情况时执行单元测试,都会提示“Not tests were found”错误,如下图所示: 正确的示例是使用public void定

    2024年01月16日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包