使用参数化 Spring ApplicationContext 配置的 JUnit 参数化测试
JUnit parametrized test with parametrized Spring ApplicationContext configuration
SpringBoot 2.2.11, JUnit 5.
我的应用程序有多个环境。我有一个测试在这些环境中测试某些条件而不是应用程序本身。
因此我想重复使用相同的测试方法,但是 运行 它针对不同的环境,根据环境变量/系统属性。
到目前为止,它是硬编码的:
@SpringBootTest(properties = ["app.env=test"])
class EnvTest {
@Test fun test01() {...}
}
我想使用类似 @ParameterizedTest
的东西。
@SpringBootTest(properties = ["app.env=test"])
class EnvTest {
@ParameterizedTest
@ValueSource(strings = {"TEST", "PROD"})
fun configCheck(env: String) {
// Made-up for illustration
spring.context.properties.put("app.env", env)
}
}
除非,这些参数来得太晚,当上下文已经创建时,测试上下文管理器无法考虑。我希望将参数应用于上下文创建。
到目前为止我能找到的所有 to parametrize the context at runtime 使我能够对 bean 进行参数化 - 即它更适合应用程序配置而不是测试配置,例如 @ContextConfiguration
或 @ConfigurationProperties
。当然,我也可以使用配置文件,运行几次。但我更喜欢一个 运行.
在我看来是不可能的,因为我要的是方法层面的,而context的创建只能控制在class层面。所以我可以将测试放在一个基础 class 上,有几个子 class,然后根据 运行 时间参数选择 运行 这些。但这不如 @ParametrizedTest
优雅:)
SpringBoot 2可以实现吗2.x?
也许 @ProfileValueSource
可以以某种方式使用?
不,目前无法使用 Spring bean 定义配置文件参数化 JUnit Jupiter 测试(方法或 class)。
相关问题:
- Spring: Introduce support for executing a test class with different sets of profiles
- Spring: Support @ContextConfiguration at method level
- Spring: Support @ActiveProfiles at method level
- JUnit 木星:Introduce extension API for container templates
理想情况下,JUnit Jupiter 将引入对容器模板的支持,届时 Spring 框架将能够在该支持的基础上构建,以便允许 ApplicationContext
使用各种活动创建测试参数化调用的配置文件 class.
在此期间,实现目标的最简单方法可能是定义一个具有通用 Spring 配置和通用测试方法的基础测试 class,然后引入子class您希望测试的每个活动配置文件组合。用 @DirtiesContext
注释基础测试 class 可能会有好处,因为为每个子 class 创建的上下文可能不会被多次使用。
SpringBoot 2.2.11, JUnit 5.
我的应用程序有多个环境。我有一个测试在这些环境中测试某些条件而不是应用程序本身。
因此我想重复使用相同的测试方法,但是 运行 它针对不同的环境,根据环境变量/系统属性。
到目前为止,它是硬编码的:
@SpringBootTest(properties = ["app.env=test"])
class EnvTest {
@Test fun test01() {...}
}
我想使用类似 @ParameterizedTest
的东西。
@SpringBootTest(properties = ["app.env=test"])
class EnvTest {
@ParameterizedTest
@ValueSource(strings = {"TEST", "PROD"})
fun configCheck(env: String) {
// Made-up for illustration
spring.context.properties.put("app.env", env)
}
}
除非,这些参数来得太晚,当上下文已经创建时,测试上下文管理器无法考虑。我希望将参数应用于上下文创建。
到目前为止我能找到的所有 to parametrize the context at runtime 使我能够对 bean 进行参数化 - 即它更适合应用程序配置而不是测试配置,例如 @ContextConfiguration
或 @ConfigurationProperties
。当然,我也可以使用配置文件,运行几次。但我更喜欢一个 运行.
在我看来是不可能的,因为我要的是方法层面的,而context的创建只能控制在class层面。所以我可以将测试放在一个基础 class 上,有几个子 class,然后根据 运行 时间参数选择 运行 这些。但这不如 @ParametrizedTest
优雅:)
SpringBoot 2可以实现吗2.x?
也许 @ProfileValueSource
可以以某种方式使用?
不,目前无法使用 Spring bean 定义配置文件参数化 JUnit Jupiter 测试(方法或 class)。
相关问题:
- Spring: Introduce support for executing a test class with different sets of profiles
- Spring: Support @ContextConfiguration at method level
- Spring: Support @ActiveProfiles at method level
- JUnit 木星:Introduce extension API for container templates
理想情况下,JUnit Jupiter 将引入对容器模板的支持,届时 Spring 框架将能够在该支持的基础上构建,以便允许 ApplicationContext
使用各种活动创建测试参数化调用的配置文件 class.
在此期间,实现目标的最简单方法可能是定义一个具有通用 Spring 配置和通用测试方法的基础测试 class,然后引入子class您希望测试的每个活动配置文件组合。用 @DirtiesContext
注释基础测试 class 可能会有好处,因为为每个子 class 创建的上下文可能不会被多次使用。