Spring JUnit Jupiter 测试注解
以下注释在与 SpringExtension
和 JUnit Jupiter(即 JUnit 5 中的编程模型)结合使用时受支持
@SpringJUnitConfig
@SpringJUnitConfig
是一个组合注释,它将 JUnit Jupiter 中的 @ExtendWith(SpringExtension.class)
与 Spring TestContext Framework 中的 @ContextConfiguration
结合在一起。它可以在类级别用作 @ContextConfiguration
的直接替代。关于配置选项,@ContextConfiguration
和 @SpringJUnitConfig
之间的唯一区别是,组件类可以在 @SpringJUnitConfig
中使用 value
属性声明。
以下示例展示了如何使用 @SpringJUnitConfig
注释来指定一个配置类
-
Java
-
Kotlin
@SpringJUnitConfig(TestConfig.class) (1)
class ConfigurationClassJUnitJupiterSpringTests {
// class body...
}
1 | 指定配置类。 |
@SpringJUnitConfig(TestConfig::class) (1)
class ConfigurationClassJUnitJupiterSpringTests {
// class body...
}
1 | 指定配置类。 |
以下示例展示了如何使用 @SpringJUnitConfig
注释来指定一个配置文件的位置
-
Java
-
Kotlin
@SpringJUnitConfig(locations = "/test-config.xml") (1)
class XmlJUnitJupiterSpringTests {
// class body...
}
1 | 指定配置文件的位置。 |
@SpringJUnitConfig(locations = ["/test-config.xml"]) (1)
class XmlJUnitJupiterSpringTests {
// class body...
}
1 | 指定配置文件的位置。 |
另请参阅 上下文管理 以及 @SpringJUnitConfig
和 @ContextConfiguration
的 javadoc 以获取更多详细信息。
@SpringJUnitWebConfig
@SpringJUnitWebConfig
是一个组合注解,它将 JUnit Jupiter 的 @ExtendWith(SpringExtension.class)
与 Spring TestContext Framework 的 @ContextConfiguration
和 @WebAppConfiguration
结合在一起。您可以在类级别使用它作为 @ContextConfiguration
和 @WebAppConfiguration
的直接替代。关于配置选项,@ContextConfiguration
和 @SpringJUnitWebConfig
之间的唯一区别是,您可以使用 @SpringJUnitWebConfig
中的 value
属性声明组件类。此外,您只能使用 @SpringJUnitWebConfig
中的 resourcePath
属性覆盖 @WebAppConfiguration
中的 value
属性。
以下示例展示了如何使用 @SpringJUnitWebConfig
注解来指定配置类
-
Java
-
Kotlin
@SpringJUnitWebConfig(TestConfig.class) (1)
class ConfigurationClassJUnitJupiterSpringWebTests {
// class body...
}
1 | 指定配置类。 |
@SpringJUnitWebConfig(TestConfig::class) (1)
class ConfigurationClassJUnitJupiterSpringWebTests {
// class body...
}
1 | 指定配置类。 |
以下示例展示了如何使用 @SpringJUnitWebConfig
注解来指定配置文件的位置
-
Java
-
Kotlin
@SpringJUnitWebConfig(locations = "/test-config.xml") (1)
class XmlJUnitJupiterSpringWebTests {
// class body...
}
1 | 指定配置文件的位置。 |
@SpringJUnitWebConfig(locations = ["/test-config.xml"]) (1)
class XmlJUnitJupiterSpringWebTests {
// class body...
}
1 | 指定配置文件的位置。 |
另请参阅 上下文管理 以及 @SpringJUnitWebConfig
、@ContextConfiguration
和 @WebAppConfiguration
的 javadoc 以获取更多详细信息。
@TestConstructor
@TestConstructor
是一个类型级注解,用于配置如何从测试的 ApplicationContext
中的组件自动装配测试类构造函数的参数。
如果测试类上不存在或元存在 @TestConstructor
,则将使用默认的测试构造函数自动装配模式。有关如何更改默认模式的详细信息,请参阅下面的提示。但是请注意,在构造函数上本地声明 @Autowired
、@jakarta.inject.Inject
或 @javax.inject.Inject
优先于 @TestConstructor
和默认模式。
更改默认测试构造函数自动装配模式
可以通过将 从 Spring Framework 5.3 开始,默认模式也可以配置为JUnit Platform 配置参数。 如果未设置 |
从 Spring Framework 5.2 开始,@TestConstructor 仅在与SpringExtension 结合使用时才受支持,用于与 JUnit Jupiter 一起使用。请注意,SpringExtension 通常会自动为您注册 - 例如,当使用@SpringJUnitConfig 和@SpringJUnitWebConfig 等注释或来自 Spring Boot Test 的各种与测试相关的注释时。
|
@NestedTestConfiguration
@NestedTestConfiguration
是一个类型级注释,用于配置如何在内部测试类的封闭类层次结构中处理 Spring 测试配置注释。
如果在测试类、其超类型层次结构或其封闭类层次结构中不存在或未元存在@NestedTestConfiguration
,则将使用默认的封闭配置继承模式。有关如何更改默认模式的详细信息,请参见下面的提示。
更改默认的封闭配置继承模式
默认的封闭配置继承模式为 |
Spring TestContext Framework为以下注释遵守@NestedTestConfiguration
语义。
@NestedTestConfiguration 的使用通常仅在与 JUnit Jupiter 中的@Nested 测试类结合使用时才有意义;但是,可能存在其他支持 Spring 和嵌套测试类的测试框架,这些框架使用此注释。
|
有关示例和更多详细信息,请参见@Nested
测试类配置。
@EnabledIf
@EnabledIf
用于表示如果提供的expression
计算结果为true
,则注释的 JUnit Jupiter 测试类或测试方法已启用,应运行。具体来说,如果表达式计算结果为Boolean.TRUE
或等于true
的String
(不区分大小写),则测试已启用。当在类级别应用时,默认情况下,该类中的所有测试方法也会自动启用。
表达式可以是以下任何一种:
-
Spring 表达式语言 (SpEL) 表达式。例如:
@EnabledIf("#{systemProperties['os.name'].toLowerCase().contains('mac')}")
-
Spring
Environment
中可用的属性占位符。例如:@EnabledIf("${smoke.tests.enabled}")
-
文本字面量。例如:
@EnabledIf("true")
但是,请注意,不是动态解析属性占位符结果的文本字面量实际上没有价值,因为 @EnabledIf("false")
等效于 @Disabled
,而 @EnabledIf("true")
在逻辑上毫无意义。
您可以使用 @EnabledIf
作为元注解来创建自定义组合注解。例如,您可以创建自定义 @EnabledOnMac
注解,如下所示:
-
Java
-
Kotlin
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@EnabledIf(
expression = "#{systemProperties['os.name'].toLowerCase().contains('mac')}",
reason = "Enabled on Mac OS"
)
public @interface EnabledOnMac {}
@Target(AnnotationTarget.TYPE, AnnotationTarget.FUNCTION)
@Retention(AnnotationRetention.RUNTIME)
@EnabledIf(
expression = "#{systemProperties['os.name'].toLowerCase().contains('mac')}",
reason = "Enabled on Mac OS"
)
annotation class EnabledOnMac {}
|
从 JUnit 5.7 开始,JUnit Jupiter 也具有名为 |
@DisabledIf
@DisabledIf
用于指示已注解的 JUnit Jupiter 测试类或测试方法被禁用,并且如果提供的 expression
评估为 true
,则不应运行。具体来说,如果表达式评估为 Boolean.TRUE
或等于 true
的 String
(不区分大小写),则测试将被禁用。当在类级别应用时,该类中的所有测试方法也将自动被禁用。
表达式可以是以下任何一种:
-
Spring 表达式语言 (SpEL) 表达式。例如:
@DisabledIf("#{systemProperties['os.name'].toLowerCase().contains('mac')}")
-
Spring
Environment
中可用的属性占位符。例如:@DisabledIf("${smoke.tests.disabled}")
-
文本字面量。例如:
@DisabledIf("true")
但是,请注意,不是动态解析属性占位符结果的文本字面量实际上没有价值,因为 @DisabledIf("true")
等效于 @Disabled
,而 @DisabledIf("false")
在逻辑上毫无意义。
您可以使用 @DisabledIf
作为元注解来创建自定义组合注解。例如,您可以创建自定义 @DisabledOnMac
注解,如下所示:
-
Java
-
Kotlin
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@DisabledIf(
expression = "#{systemProperties['os.name'].toLowerCase().contains('mac')}",
reason = "Disabled on Mac OS"
)
public @interface DisabledOnMac {}
@Target(AnnotationTarget.TYPE, AnnotationTarget.FUNCTION)
@Retention(AnnotationRetention.RUNTIME)
@DisabledIf(
expression = "#{systemProperties['os.name'].toLowerCase().contains('mac')}",
reason = "Disabled on Mac OS"
)
annotation class DisabledOnMac {}
|
从 JUnit 5.7 开始,JUnit Jupiter 也具有名为 |