|
对于最新的稳定版本,请使用 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和默认模式。
|
更改默认测试构造函数自动连线模式
默认的测试构造函数自动配线模式可以通过设置 从 Spring Framework 5.3 开始,默认模式也可以配置为 JUnit Platform 配置参数。 如果 |
从 Spring Framework 5.2 开始,@TestConstructor仅结合支持
使用SpringExtension与 JUnit Jupiter 一起使用。请注意,SpringExtension是
通常会自动为您注册 - 例如,在使用@SpringJUnitConfig和@SpringJUnitWebConfig或来自
Spring Boot 测试。 |
@NestedTestConfiguration
@NestedTestConfiguration是类型级注解,用于配置
Spring 测试配置注释在封闭的类层次结构中处理
用于内部测试类。
如果@NestedTestConfiguration在测试类中不存在或元存在,在其
超类型层次结构,或者在其封闭类层次结构中,默认封闭
将使用配置继承模式。有关如何作的详细信息,请参阅下面的提示
更改默认模式。
|
更改缺省封闭配置继承模式
默认的封闭配置继承模式是 |
Spring TestContext 框架尊重@NestedTestConfiguration语义
后面的注释。
使用@NestedTestConfiguration通常只有结合起来才有意义
跟@NestedJUnit 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(忽略大小写),则禁用测试。当应用于类级别时,所有
该类中的测试方法也会自动禁用。
表达式可以是以下任一表达式:
-
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 还有一个名为 |