此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Framework 6.2.0! |
Spring JUnit Jupiter 测试注释
当与SpringExtension
和 JUnit Jupiter
(即 JUnit 5 中的编程模型):
@SpringJUnitConfig
@SpringJUnitConfig
是一个组合@ExtendWith(SpringExtension.class)
来自 JUnit Jupiter 和@ContextConfiguration
从
Spring TestContext 框架。它可以在类级别用作 drop-in
替代@ContextConfiguration
.对于配置选项,唯一的
区别@ContextConfiguration
和@SpringJUnitConfig
是那个组件
类可以使用value
属性@SpringJUnitConfig
.
以下示例演示如何使用@SpringJUnitConfig
注解来指定
configuration 类:
-
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 | 指定配置文件的位置。 |
请参阅 Context Management 以及 javadoc 以获取@SpringJUnitConfig
和@ContextConfiguration
了解更多详情。
@SpringJUnitWebConfig
@SpringJUnitWebConfig
是一个组合@ExtendWith(SpringExtension.class)
来自 JUnit Jupiter 和@ContextConfiguration
和@WebAppConfiguration
来自 Spring TestContext Framework。您可以在课堂上使用它
level 作为@ContextConfiguration
和@WebAppConfiguration
.
关于配置选项,唯一的区别是@ContextConfiguration
和@SpringJUnitWebConfig
是,您可以使用value
属性@SpringJUnitWebConfig
.此外,您还可以覆盖value
属性从@WebAppConfiguration
只有使用resourcePath
属性@SpringJUnitWebConfig
.
以下示例演示如何使用@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 | 指定配置文件的位置。 |
请参阅 Context Management 以及 javadoc 以获取@SpringJUnitWebConfig
,@ContextConfiguration
和@WebAppConfiguration
了解更多详情。
@TestConstructor
@TestConstructor
是一个注解,可以应用于测试类来配置如何
测试类构造函数的参数是从测试的ApplicationContext
.
如果@TestConstructor
不存在或元存在于测试类中,则默认测试
构造函数 autowire 模式。有关如何更改的详细信息,请参阅下面的提示
默认模式。但是请注意,本地声明@Autowired
,@jakarta.inject.Inject
或@javax.inject.Inject
on 构造函数优先
在两者之上@TestConstructor
和默认模式。
更改默认测试构造函数 autowire 模式
默认的测试构造函数 autowire 模式可以通过设置 默认模式也可以配置为 JUnit Platform 配置参数。 如果 |
@TestConstructor 仅支持与SpringExtension 为
与 JUnit Jupiter 一起使用。请注意,SpringExtension 通常会自动注册
为您 – 例如,当使用@SpringJUnitConfig 和@SpringJUnitWebConfig 或 Spring Boot Test 中的各种与测试相关的 Comments。 |
@NestedTestConfiguration
@NestedTestConfiguration
是一个注解,可以应用于测试类
配置在封闭类中处理 Spring 测试配置注释的方式
内部测试类的层次结构。
如果@NestedTestConfiguration
在测试类中不存在或元存在,则在其
supertype 层次结构,或者在其封闭类层次结构中,默认的封闭
将使用 Configuration Inheritance 模式。有关如何作的详细信息,请参阅下面的提示
更改 Default Mode。
更改默认的封闭配置继承模式
默认的封闭配置继承模式为 |
Spring TestContext 框架尊重@NestedTestConfiguration
semantics 的
以下注释。
的使用@NestedTestConfiguration 通常只有在连用时才有意义
跟@Nested JUnit Jupiter 中的 test 类;但是,可能还有其他检查
支持 Spring 的框架和使用此
注解。 |
看@Nested
test 类配置有关示例和进一步
详。
@EnabledIf
@EnabledIf
用于表示带注释的 JUnit Jupiter 测试类或测试方法
已启用,并且如果提供的expression
计算结果为true
.
具体来说,如果表达式的计算结果为Boolean.TRUE
或String
等于true
(忽略大小写),则启用测试。在类级别应用时,所有测试方法
默认情况下,该类也会自动启用。
表达式可以是以下任何一项:
-
Spring 表达式语言 (SpEL) 表达式。例如:
@EnabledIf("#{systemProperties['os.name'].toLowerCase().contains('mac')}")
-
Spring 中可用的属性的占位符
Environment
. 例如:@EnabledIf("${smoke.tests.enabled}")
-
文本文本。例如:
@EnabledIf("true")
但是请注意,如果文本文本不是
property placeholder 的实用价值为零,因为@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
或String
平等
自true
(忽略大小写),则禁用测试。在类级别应用时,所有
该类中的 test 方法也会自动禁用。
表达式可以是以下任何一项:
-
Spring 表达式语言 (SpEL) 表达式。例如:
@DisabledIf("#{systemProperties['os.name'].toLowerCase().contains('mac')}")
-
Spring 中可用的属性的占位符
Environment
. 例如:@DisabledIf("${smoke.tests.disabled}")
-
文本文本。例如:
@DisabledIf("true")
但是请注意,如果文本文本不是
property placeholder 的实用价值为零,因为@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 还有一个名为 |