JUnit参数化测试,带有参数化的Spring ApplicationContext配置



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可以以某种方式使用?

不,目前不可能用Spring bean定义概要文件参数化JUnit Jupiter测试(方法或类)。

相关问题:

  1. Spring:引入对使用不同配置文件集执行测试类的支持
  2. Spring:在方法级别支持@ContextConfiguration
  3. Spring:在方法级别支持@ActiveProfiles
  4. JUnit Jupiter:为容器模板引入扩展API

理想情况下,JUnit Jupiter将引入对容器模板的支持,此时Spring Framework将能够在该支持的基础上进行构建,以便使用各种活动配置文件创建ApplicationContext,用于测试类的参数化调用。

在此期间,实现目标的最简单方法可能是定义一个具有通用Spring配置和通用测试方法的基本测试类,然后为要测试的活动概要文件的每个组合引入一个子类。用@DirtiesContext注释基本测试类可能是有益的,因为为每个子类创建的上下文可能不会被多次使用。

相关内容

  • 没有找到相关文章

最新更新