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.

相关推荐
努力努力再努力wz5 小时前
【Lua 进阶系列】从 C++ 对象到 Lua 变量:一文理解 userdata、Lua 栈与元表绑定机制
c++·junit·lua
努力努力再努力wz4 天前
【Lua进阶系列】Lua 调试机制详解:从虚拟机调用栈、错误传播到 debug 库
junit·单元测试·lua
BuHuaX8 天前
Lua 与 ToLua:运行机制及热更新原理
开发语言·unity·junit·c#·lua
海棠Flower未眠8 天前
下单请求处理流程:商品维度分布式锁与 Redis 预扣库存
redis·分布式·junit
努力努力再努力wz8 天前
【Lua 入门系列】模块与包(一):从多文件组织到require 运行时加载机制、模块缓存、预加载搜索与 Lua 文件搜索机制
开发语言·junit·lua
CarIise10 天前
Spring 框架:多配置文件、开发方式与 IOC 注解
junit·maven·jar
努力努力再努力wz10 天前
【Lua入门系列】从 Table 到元表与元方法:一文理解 Lua 的行为扩展机制
开发语言·junit·lua
麻瓜code11 天前
秒杀优化三连:Lua + 阻塞队列 + Redis Stream,响应从 3.4 秒到毫秒级
redis·junit·lua
努力努力再努力wz13 天前
【Lua 入门系列】从顺序执行到分支与循环:一文理解 Lua 控制结构、作用域与跳转规则
junit·单元测试·lua
努力努力再努力wz14 天前
【Lua入门系列】从动态类型到变量作用域:彻底理解 local、全局变量与跨文件访问
开发语言·junit·lua