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

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.kler.cn/a/231524.html

相关文章:

  • 【AI图像生成网站Golang】项目架构
  • SpringBoot总结
  • vue实现展示并下载后端返回的图片流
  • nodejs+mysql+vue3 应用实例剖析
  • 后仿真中的GLS测试用例的选取规则
  • 三周精通FastAPI:42 手动运行服务器 - Uvicorn Gunicorn with Uvicorn
  • 3060ti显卡+cuda12.1+win10编译安装生成fastdeploy的c++与python库
  • 【日志框架】
  • 【JavaEE Spring】Spring 原理
  • C++艺术字头文件:ArtText.h
  • PyTorch深度学习实战(23)——从零开始实现SSD目标检测
  • Debian系统显示中文
  • Unity SRP 管线【第十讲:SRP/URP 图形API】
  • HCIA-HarmonyOS设备开发认证V2.0-3.2.轻量系统内核基础-任务管理
  • shell脚本基础语法(.sh ./ sh bash source shell)
  • 彻底学会系列:一、机器学习之线性回归(一)
  • nginx slice模块的使用和源码分析
  • 保证 scope=session 的 fixture 在多进程运行情况下仍然能只运行一次
  • 项目02《游戏-09-开发》Unity3D
  • Leetcode 139 单词拆分
  • 【人工智能】神奇的Embedding:文本变向量,大语言模型智慧密码解析(10)
  • JWT令牌
  • React+Echarts实现数据排名+自动滚动+Y轴自定义toolTip文字提示
  • 【TCP】高频面试题
  • IMU模型介绍
  • ubuntu 没有屏幕安装QT(SSH远程登陆下)