此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Framework 6.2.10! |
Spring JUnit Jupiter 测试注释
当与SpringExtension
和 JUnit Jupiter
(即 JUnit 5 中的编程模型):
@SpringJUnitConfig
@SpringJUnitConfig
是一个组合的注释,它结合了@ExtendWith(SpringExtension.class)
来自 JUnit Jupiter 与@ContextConfiguration
从
Spring TestContext 框架。它可以在班级级别用作临时
替换@ContextConfiguration
.关于配置选项,唯一的
区别@ContextConfiguration
和@SpringJUnitConfig
是那个组件
类可以使用value
属性@SpringJUnitConfig
.
以下示例演示如何使用@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 | 指定配置文件的位置。 |
请参阅上下文管理以及 javadoc@SpringJUnitConfig
和@ContextConfiguration
了解更多详情。
@SpringJUnitWebConfig
@SpringJUnitWebConfig
是一个组合的注释,它结合了@ExtendWith(SpringExtension.class)
来自 JUnit Jupiter 与@ContextConfiguration
和@WebAppConfiguration
来自 Spring TestContext 框架。您可以在课堂上使用它
水平作为直接替代品@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 | 指定配置文件的位置。 |
请参阅上下文管理以及 javadoc@SpringJUnitWebConfig
,@ContextConfiguration
和@WebAppConfiguration
了解更多详情。
@TestConstructor
@TestConstructor
是一个注解,可以应用于测试类以配置如何
测试类构造函数的参数是从测试的ApplicationContext
.
如果@TestConstructor
在测试类上不存在或元存在,默认测试
将使用构造函数自动连线模式。有关如何更改的详细信息,请参阅下面的提示
默认模式。但请注意,本地声明@Autowired
,@jakarta.inject.Inject
或@javax.inject.Inject
在构造函数上优先
在两者之间@TestConstructor
和默认模式。
更改默认测试构造函数自动连线模式
默认的测试构造函数自动配线模式可以通过设置 默认模式也可以配置为 JUnit Platform 配置参数。 如果 |
@TestConstructor 仅与SpringExtension 为
与 JUnit Jupiter 一起使用。请注意,SpringExtension 通常会自动注册
为您 - 例如,当使用@SpringJUnitConfig 和@SpringJUnitWebConfig 或来自 Spring Boot Test 的各种与测试相关的注释。 |
@NestedTestConfiguration
@NestedTestConfiguration
是一个注释,可以应用于测试类
配置如何在封闭类中处理 Spring 测试配置注释
内部测试类的层次结构。
如果@NestedTestConfiguration
在测试类中不存在或元存在,在其
超类型层次结构,或者在其封闭类层次结构中,默认封闭
将使用配置继承模式。有关如何作的详细信息,请参阅下面的提示
更改默认模式。
更改缺省封闭配置继承模式
默认的封闭配置继承模式是 |
Spring TestContext 框架尊重@NestedTestConfiguration
语义
后面的注释。
使用@NestedTestConfiguration 通常只有结合起来才有意义
跟@Nested JUnit Jupiter 中的测试类;但是,可能还有其他测试
支持 Spring 的框架和利用此功能的嵌套测试类
注解。 |
看@Nested
测试类配置有关示例和更多详细信息。
@EnabledIf
@EnabledIf
用于表示带注释的 JUnit Jupiter 测试类或测试方法
已启用,如果提供的expression
评估为true
.
具体而言,如果表达式的计算结果为Boolean.TRUE
或String
等于true
(忽略大小写),则测试已启用。当应用于类级别时,所有测试方法
默认情况下也会自动启用该类。
表达式可以是以下任一表达式:
-
Spring 表达式语言 (SpEL) 表达式。例如:
@EnabledIf("#{systemProperties['os.name'].toLowerCase().contains('mac')}")
-
春季可用属性的占位符
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
或String
平等 自true
(忽略大小写),则测试被禁用。当在类级别应用时,该类中的所有test 方法也会自动禁用。
表达式可以是以下任一表达式:
-
Spring 表达式语言 (SpEL) 表达式。例如:
@DisabledIf("#{systemProperties['os.name'].toLowerCase().contains('mac')}")
-
春季可用属性的占位符
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 还有一个名为 |