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.

相关推荐
Dnelic-19 小时前
Android 单元测试环境配置问题 Execution failed for task ‘:mergeDebugJavaResource‘.
android·人工智能·junit·单元测试·gradle·自学笔记
fensnote1 天前
Qt编译lua库并调用
qt·junit·lua
GDAL2 天前
lua入门教程:ipairs
开发语言·junit·lua
lianghyan4 天前
Junit test with mock
junit·mockito·spy
GDAL4 天前
lua入门教程 :模块和包
开发语言·junit·lua
风霜不见闲沉月7 天前
kong网关的使用
junit·kong
一名技术极客8 天前
Nginx 实现动态封禁IP,详细教程来了
tcp/ip·nginx·junit
菠萝地亚狂想曲9 天前
优雅的LUA数据记录方法-serpent序列化+LUA Table
开发语言·junit·lua
硬汉嵌入式10 天前
H7-TOOL的LUA小程序教程第17期:扩展驱动AD7606, ADS1256,MCP3421, 8路继电器和5路DS18B20(2024-11-01)
junit·小程序·lua
程序猿小D11 天前
第三百零六节 Log4j教程 - Log4j日志级别
junit·单元测试·log4j