当前位置: 首页 > news >正文

JUnit 5 注解总结与解析

前言

大家好,我是chowley,通过前篇的JUnit实践,我对这个框架产生了好奇,除了断言判断,它还有哪些用处呢?下面来总结一下它的常见注解及作用。

正文

在Java单元测试中,JUnit是一种常用的测试框架,它提供了丰富的注解用于标识测试方法、设置测试环境以及控制测试执行流程。除了用于断言判断之外,JUnit的注解还有许多其他用途。

JUnit Jupiter支持以下注解来配置测试并扩展框架。

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

注解描述
@Test标识一个方法为测试方法。与JUnit 4的@Test注解不同,此注解不声明任何属性,因为JUnit Jupiter中的测试扩展是基于它们自己的专用注解操作的。此类方法会被继承,除非它们被覆盖。
@ParameterizedTest标识一个方法为参数化测试。此类方法会被继承,除非它们被覆盖。
@RepeatedTest标识一个方法为重复测试的测试模板。此类方法会被继承,除非它们被覆盖。
@TestFactory标识一个方法为动态测试的测试工厂。此类方法会被继承,除非它们被覆盖。
@TestTemplate标识一个方法为测试用例的模板,设计用于根据注册的提供程序返回的调用上下文次数多次调用。此类方法会被继承,除非它们被覆盖。
@TestClassOrder用于配置被注解测试类中的@Nested测试类的测试类执行顺序。此类注解会被继承。
@TestMethodOrder用于配置被注解测试类中的测试方法执行顺序;类似于JUnit 4的@FixMethodOrder。此类注解会被继承。
@TestInstance用于配置被注解测试类的测试实例生命周期。此类注解会被继承。
@DisplayName为测试类或测试方法声明自定义显示名称。此类注解不会被继承。
@DisplayNameGeneration为测试类声明自定义显示名称生成器。此类注解会被继承。
@BeforeEach标识应在当前类中的每个@Test、@RepeatedTest、@ParameterizedTest或@TestFactory方法之前执行的方法;类似于JUnit 4的@Before。此类方法会被继承,除非它们被覆盖或替代(即,仅基于签名替换,而不考虑Java的可见性规则)。
@AfterEach标识应在当前类中的每个@Test、@RepeatedTest、@ParameterizedTest或@TestFactory方法之后执行的方法;类似于JUnit 4的@After。此类方法会被继承,除非它们被覆盖或替代(即,仅基于签名替换,而不考虑Java的可见性规则)。
@BeforeAll标识应在当前类中的所有@Test、@RepeatedTest、@ParameterizedTest和@TestFactory方法之前执行的方法;类似于JUnit 4的@BeforeClass。此类方法会被继承,除非它们被隐藏、覆盖或替代(即,仅基于签名替换,而不考虑Java的可见性规则),并且必须是静态的,除非使用了“每类”测试实例生命周期。
@AfterAll标识应在当前类中的所有@Test、@RepeatedTest、@ParameterizedTest和@TestFactory方法之后执行的方法;类似于JUnit 4的@AfterClass。此类方法会被继承,除非它们被隐藏、覆盖或替代(即,仅基于签名替换,而不考虑Java的可见性规则),并且必须是静态的,除非使用了“每类”测试实例生命周期。
@Nested标识一个非静态嵌套测试类。在Java 8到Java 15中,除非使用“每类”测试实例生命周期,否则不能直接在@Nested测试类中使用@BeforeAll和@AfterAll方法。从Java 16开始,@BeforeAll和@AfterAll方法可以声明为@Nested测试类中的静态方法,并且可以使用任何测试实例生命周期模式。此类注解不会被继承。
@Tag用于在类级别或方法级别声明标记以过滤测试;类似于TestNG中的测试组或JUnit 4中的Categories。此类注解在类级别继承,但在方法级别不继承。
@Disabled用于禁用测试类或测试方法;类似于JUnit 4的@Ignore。此类注解不会被继承。
@Timeout用于如果执行超过给定持续时间,则失败测试、测试工厂、测试模板或生命周期方法。此类注解会被继承。
@ExtendWith用于声明性地注册扩展。此类注解会被继承。
@RegisterExtension用于通过字段编程方式注册扩展。除非被隐藏,否则此类字段会被继承。
@TempDir用于通过字段注入或参数注入在生命周期方法或测试方法中提供临时目录;位于org.junit.jupiter.api.io包中。

通过合理使用这些注解,可以更好地控制测试的行为,并且提高代码的可测试性和可维护性。

好了,以上就是本文的全部内容,如有问题欢迎留言讨论。

本人正在组建测试开发方向的交流社区,如果您对软件质量管理方面感兴趣,欢迎私信我了解。

我是chowley,一个专注互联网技术和软件质量保障领域的博主,我们下次再见!

欢迎点赞、评论、收藏,it's important for me.

欢迎点赞、评论、收藏,it's important for me.

欢迎点赞、评论、收藏,it's important for me.

http://www.lryc.cn/news/296201.html

相关文章:

  • CSS综合案例4
  • WifiConfigStore初始化读取-Android13
  • 【Spring源码解读!底层原理进阶】【下】探寻Spring内部:BeanFactory和ApplicationContext实现原理揭秘✨
  • 从零开始手写mmo游戏从框架到爆炸(六)— 消息处理工厂
  • Go基础学习笔记-知识点
  • jvm几个常见面试题整理
  • ReentrantLock 和 公平锁
  • 使用Postman做API自动化测试
  • 入门指南|Chat GPT 的兴起:它如何改变数字营销格局?
  • 【C#】.net core 6.0 创建默认Web应用,以及默认结构讲解,适合初学者
  • Linux中的numactl命令指南
  • AD域国产替代方案,助力某金融企业麒麟信创电脑实现“真替真用”
  • 抽象springBoot报错
  • Linux的打包压缩与解压缩---tar、xz、zip、unzip
  • 在angular12中proxy.conf.json中配置详解
  • PyTorch 中音频信号处理库torchaudio的详细介绍
  • OpenAI研究揭示:ChatGPT对生物武器制造影响有限
  • IntelliJ IDEA 2023.3发布,AI 助手出世,新特性杀麻了!!
  • async 与 await(JavaScript)
  • GPT-1, GPT-2, GPT-3, GPT-3.5, GPT-4论文内容解读
  • 第62讲商品搜索动态实现以及性能优化
  • 我的PyTorch模型比内存还大,怎么训练呀?
  • HTTP协议笔记
  • 零基础学Python之网络编程
  • 09 AB 10串口通信发送原理
  • [145] 二叉树的后序遍历 js
  • 开源模型应用落地-业务优化篇(四)
  • MySQL的MVCC机制
  • stable-diffusion | v1-5-pruned.ckpt和v1-5-pruned-emaonly.ckpt的区别
  • 基于Springboot的足球社区管理系统(有报告)。Javaee项目,springboot项目。