对于最新的稳定版本,请使用 Spring Framework 6.2.0spring-doc.cadn.net.cn

Spring JUnit Jupiter 测试注释

@SpringJUnitConfig

@SpringJUnitConfig是一个组合@ExtendWith(SpringExtension.class)来自 JUnit Jupiter 和@ContextConfiguration从 Spring TestContext 框架。它可以在类级别用作 drop-in 替代@ContextConfiguration.对于配置选项,唯一的 区别@ContextConfiguration@SpringJUnitConfig是那个组件 类可以使用value属性@SpringJUnitConfig.spring-doc.cadn.net.cn

以下示例演示如何使用@SpringJUnitConfig注解来指定 configuration 类: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 指定配置文件的位置。

请参阅 Context Management 以及 javadoc 以获取@SpringJUnitConfig@ContextConfiguration了解更多详情。spring-doc.cadn.net.cn

@SpringJUnitWebConfig

@SpringJUnitWebConfig是一个组合@ExtendWith(SpringExtension.class)来自 JUnit Jupiter 和@ContextConfiguration@WebAppConfiguration来自 Spring TestContext Framework。您可以在课堂上使用它 level 作为@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不存在或元存在于测试类中,则默认测试 构造函数 autowire 模式。有关如何更改的详细信息,请参阅下面的提示 默认模式。但是请注意,本地声明@Autowired在 constructor 优先于两者@TestConstructor和默认模式。spring-doc.cadn.net.cn

更改默认测试构造函数 autowire 模式

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

从 Spring Framework 5.3 开始,默认模式也可以配置为 JUnit Platform 配置参数spring-doc.cadn.net.cn

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

从 Spring Framework 5.2 开始,@TestConstructor仅支持结合使用 使用SpringExtension用于 JUnit Jupiter。请注意,SpringExtension是 通常会自动为您注册 - 例如,当使用@SpringJUnitConfig@SpringJUnitWebConfig或各种与测试相关的注解 Spring Boot 测试。

@NestedTestConfiguration

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

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

更改默认的封闭配置继承模式

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

Spring TestContext 框架尊重@NestedTestConfigurationsemantics 的 以下注释。spring-doc.cadn.net.cn

的使用@NestedTestConfiguration通常只有在连用时才有意义 跟@NestedJUnit Jupiter 中的 test 类;但是,可能还有其他检查 支持 Spring 的框架和使用此 注解。

@Nestedtest 类配置有关示例和进一步 详。spring-doc.cadn.net.cn

@EnabledIf

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

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

但是请注意,如果文本文本不是 property placeholder 的实用价值为零,因为@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支持 确保导入 annotation 类型 从正确的包装中。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

但是请注意,如果文本文本不是 property placeholder 的实用价值为零,因为@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支持 确保导入 annotation 类型 从正确的包装中。spring-doc.cadn.net.cn