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)
}
}
除非,这些参数来得太晚,当上下文已经创建时,测试上下文管理器无法考虑。我希望将参数应用于上下文创建。
到目前为止,我所能找到的所有在运行时对上下文进行参数化的方法都使我能够对 bean 进行参数化 - 即它是用于应用程序配置而不是测试配置,例如@ContextConfiguration
,或@ConfigurationProperties
。当然,我也可以使用配置文件,并运行几次。但我更喜欢一次跑步。
在我看来这是不可能的,因为我想要的是在方法级别,但上下文创建只能在类级别进行控制。所以我可以把测试放到一个基类上,有几个子类,然后根据运行时参数选择运行这些。但这并不像@ParametrizedTest
:)那么优雅
SpringBoot 2.2.x 可以做到这一点吗?
也许@ProfileValueSource
可以以某种方式使用?