此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Framework 6.2.10spring-doc.cadn.net.cn

Spring JUnit Jupiter 测试注释

@SpringJUnitConfig

@SpringJUnitConfig是一个组合的注释,它结合了@ExtendWith(SpringExtension.class)来自 JUnit Jupiter 与@ContextConfiguration从 Spring TestContext 框架。它可以在班级级别用作临时 替换@ContextConfiguration.关于配置选项,唯一的 区别@ContextConfiguration@SpringJUnitConfig是那个组件 类可以使用value属性@SpringJUnitConfig.spring-doc.cadn.net.cn

以下示例演示如何使用@SpringJUnitConfig注释来指定 配置类:spring-doc.cadn.net.cn

@SpringJUnitConfig(TestConfig.class) (1)
class ConfigurationClassJUnitJupiterSpringTests {
	// class body...
}
1 指定配置类。
@SpringJUnitConfig(TestConfig::class) (1)
class ConfigurationClassJUnitJupiterSpringTests {
	// class body...
}
1 指定配置类。

以下示例演示如何使用@SpringJUnitConfig注释来指定 配置文件的位置:spring-doc.cadn.net.cn

@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了解更多详情。spring-doc.cadn.net.cn

@SpringJUnitWebConfig

@SpringJUnitWebConfig是一个组合的注释,它结合了@ExtendWith(SpringExtension.class)来自 JUnit Jupiter 与@ContextConfiguration@WebAppConfiguration来自 Spring TestContext 框架。您可以在课堂上使用它 水平作为直接替代品@ContextConfiguration@WebAppConfiguration. 关于配置选项,唯一的区别@ContextConfiguration@SpringJUnitWebConfig是您可以使用value属性@SpringJUnitWebConfig.此外,您可以覆盖value属性从@WebAppConfiguration仅通过使用resourcePath属性@SpringJUnitWebConfig.spring-doc.cadn.net.cn

以下示例演示如何使用@SpringJUnitWebConfig注解来指定 配置类:spring-doc.cadn.net.cn

@SpringJUnitWebConfig(TestConfig.class) (1)
class ConfigurationClassJUnitJupiterSpringWebTests {
	// class body...
}
1 指定配置类。
@SpringJUnitWebConfig(TestConfig::class) (1)
class ConfigurationClassJUnitJupiterSpringWebTests {
	// class body...
}
1 指定配置类。

以下示例演示如何使用@SpringJUnitWebConfig注释来指定 配置文件的位置:spring-doc.cadn.net.cn

@SpringJUnitWebConfig(locations = "/test-config.xml") (1)
class XmlJUnitJupiterSpringWebTests {
	// class body...
}
1 指定配置文件的位置。
@SpringJUnitWebConfig(locations = ["/test-config.xml"]) (1)
class XmlJUnitJupiterSpringWebTests {
	// class body...
}
1 指定配置文件的位置。

@TestConstructor

@TestConstructor是一个注解,可以应用于测试类以配置如何 测试类构造函数的参数是从测试的ApplicationContext.spring-doc.cadn.net.cn

如果@TestConstructor在测试类上不存在或元存在,默认测试 将使用构造函数自动连线模式。有关如何更改的详细信息,请参阅下面的提示 默认模式。但请注意,本地声明@Autowired,@jakarta.inject.Inject@javax.inject.Inject在构造函数上优先 在两者之间@TestConstructor和默认模式。spring-doc.cadn.net.cn

更改默认测试构造函数自动连线模式

默认的测试构造函数自动配线模式可以通过设置spring.test.constructor.autowire.modeJVM 系统属性设置为all.或者, 默认模式可以通过SpringProperties机制。spring-doc.cadn.net.cn

默认模式也可以配置为 JUnit Platform 配置参数spring-doc.cadn.net.cn

如果spring.test.constructor.autowire.mode属性未设置,测试类 构造函数不会自动自动连接。spring-doc.cadn.net.cn

@TestConstructor仅与SpringExtension为 与 JUnit Jupiter 一起使用。请注意,SpringExtension通常会自动注册 为您 - 例如,当使用@SpringJUnitConfig@SpringJUnitWebConfig或来自 Spring Boot Test 的各种与测试相关的注释。

@NestedTestConfiguration

@NestedTestConfiguration是一个注释,可以应用于测试类 配置如何在封闭类中处理 Spring 测试配置注释 内部测试类的层次结构。spring-doc.cadn.net.cn

如果@NestedTestConfiguration在测试类中不存在或元存在,在其 超类型层次结构,或者在其封闭类层次结构中,默认封闭 将使用配置继承模式。有关如何作的详细信息,请参阅下面的提示 更改默认模式。spring-doc.cadn.net.cn

更改缺省封闭配置继承模式

默认的封闭配置继承模式INHERIT,但可以 通过设置spring.test.enclosing.configurationJVM 系统属性设置为OVERRIDE.或者,可以通过SpringProperties机制。spring-doc.cadn.net.cn

Spring TestContext 框架尊重@NestedTestConfiguration语义 后面的注释。spring-doc.cadn.net.cn

使用@NestedTestConfiguration通常只有结合起来才有意义 跟@NestedJUnit Jupiter 中的测试类;但是,可能还有其他测试 支持 Spring 的框架和利用此功能的嵌套测试类 注解。

@Nested测试类配置有关示例和更多详细信息。spring-doc.cadn.net.cn

@EnabledIf

@EnabledIf用于表示带注释的 JUnit Jupiter 测试类或测试方法 已启用,如果提供的expression评估为true. 具体而言,如果表达式的计算结果为Boolean.TRUEString等于true(忽略大小写),则测试已启用。当应用于类级别时,所有测试方法 默认情况下也会自动启用该类。spring-doc.cadn.net.cn

表达式可以是以下任一表达式:spring-doc.cadn.net.cn

但是请注意,文本文字不是动态解析的结果 属性占位符的实用价值为零,因为@EnabledIf("false")是 相当于@Disabled@EnabledIf("true")在逻辑上毫无意义。spring-doc.cadn.net.cn

您可以使用@EnabledIf作为元注释来创建自定义组合注释。为 示例,您可以创建自定义@EnabledOnMac注释如下:spring-doc.cadn.net.cn

@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 {}

@EnabledOnMac仅作为可能的示例。如果你有确切的用例,请使用内置的@EnabledOnOs(MAC)在 JUnit Jupiter 中支持。spring-doc.cadn.net.cn

从 JUnit 5.7 开始,JUnit Jupiter 还有一个名为@EnabledIf. 因此 如果你想使用 Spring 的@EnabledIf支持确保从正确的包导入注释类型。spring-doc.cadn.net.cn

@DisabledIf

@DisabledIf用于表示带注释的 JUnit Jupiter 测试类或测试方法被禁用,如果提供的expression评估为true. 具体而言,如果表达式的计算结果为Boolean.TRUEString平等 自true(忽略大小写),则测试被禁用。当在类级别应用时,该类中的所有test 方法也会自动禁用。spring-doc.cadn.net.cn

表达式可以是以下任一表达式:spring-doc.cadn.net.cn

但是请注意,文本文字不是动态解析的结果 属性占位符的实用价值为零,因为@DisabledIf("true")是 相当于@Disabled@DisabledIf("false")在逻辑上毫无意义。spring-doc.cadn.net.cn

您可以使用@DisabledIf作为元注释来创建自定义组合注释。为 示例,您可以创建自定义@DisabledOnMac注释如下:spring-doc.cadn.net.cn

@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 {}

@DisabledOnMac仅作为可能的示例。如果你有确切的用例,请使用内置的@DisabledOnOs(MAC)在 JUnit Jupiter 中支持。spring-doc.cadn.net.cn

从 JUnit 5.7 开始,JUnit Jupiter 还有一个名为@DisabledIf. 因此 如果你想使用 Spring 的@DisabledIf支持确保从正确的包导入注释类型。spring-doc.cadn.net.cn