Logo
Section 1 / 14

注册扩展

了解如何在 JUnit 5 中注册扩展。

导入

注册扩展

了解如何在 JUnit 5 中注册扩展。

概述

在前面的章节中,我们已经了解了 JUnit 5 的扩展机制,包括参数解析器和参数化测试的参数源。这些都是 JUnit 5 内置的扩展。本章我们将学习如何创建自定义扩展。JUnit 5 提供了 org.junit.jupiter.api.extension.Extension 接口用于所有扩展。

Extension 只是一个标记接口。自定义扩展通常实现 Extension 的子接口。Extension 的实现类必须提供一个无参构造函数,以便 JUnit 平台能够创建新实例。所有扩展相关的接口都位于 org.junit.jupiter.api.extension 包中。

注册扩展

要使用一个扩展,首先需要将其注册到 JUnit 5。JUnit 5 的内置扩展会自动注册。自定义扩展可以通过 @ExtendWith 注解显式注册,也可以通过 Java 的服务提供者机制自动注册。

@ExtendWith 注解

@ExtendWith 注解可以添加到测试类或测试方法上,用于注册扩展。@ExtendWith 的唯一值是 Class<? extends Extension> 类型的数组。该注解是可重复的,因此可以在同一个类或方法上添加多个 @ExtendWith 注解,以注册多个扩展。

Java 服务提供者机制

扩展也可以通过 Java 的服务提供者机制(java.util.ServiceLoader)进行注册,这种方式特别适合第三方扩展。将这些扩展放入类路径后,可以自动完成注册。扩展类需满足服务提供者的标准要求:JAR 文件的 /META-INF/services 目录下应包含名为 org.junit.jupiter.api.extension.Extension 的文件,其内容为扩展类的全限定名。

使用 `ServiceLoader` 注册扩展默认是禁用的。需要通过设置 JVM 系统属性 `junit.jupiter.extensions.autodetection.enabled` 为 `true` 来启用,方法是在 JVM 启动参数中添加 `junit.jupiter.extensions.autodetection.enabled=true`。

Course Image

JUnit 5 中的测试实例生命周期

扩展上下文