junit参数化测试,带有参数化spring应用程序上下文配置

muk1a3rh  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(355)

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——也就是说,它更适合于app config而不是test config,比如, @ContextConfiguration ,或 @ConfigurationProperties . 当然,我也可以使用配置文件,并运行几次。但我更喜欢一次跑步。
在我看来这是不可能的,因为我想要的是方法级的,但是上下文创建只能在类级控制。所以我可以把测试放在一个基类上,有几个子类,然后根据运行时参数选择运行这些子类。但这并不像你想象的那么优雅 @ParametrizedTest :)
springboot 2.2.x可以这样吗?
也许 吧 @ProfileValueSource 可以用什么方法?

1l5u6lss

1l5u6lss1#

不,目前无法用springbean定义概要文件参数化junitjupiter测试(方法或类)。
相关问题:
spring:引入对使用不同的概要文件集执行测试类的支持
spring:在方法级别支持@contextconfiguration
spring:在方法级别支持@activeprofiles
junitjupiter:为容器模板引入扩展api
理想情况下,junitjupiter将引入对容器模板的支持,此时spring框架将能够在该支持之上进行构建,以允许 ApplicationContext 使用各种活动概要文件创建,用于测试类的参数化调用。
在此期间,实现目标的最简单方法可能是定义一个具有公共spring配置和公共测试方法的基本测试类,然后为要测试的活动概要文件的每个组合引入一个子类。用注解基测试类 @DirtiesContext 这可能是有益的,因为为每个子类创建的上下文可能不会被多次使用。

相关问题