@TestPropertySource 会尊重 SPEL 或其他属性的值吗?

Ton*_*lla 6 spring spring-test spring-boot

我想知道是否@TestPropertySource会尊重 SpEL 或者至少允许一个属性替换另一个属性的值。

这是一个与动态属性 @TestPropertySource类似的问题

假设我所指的属性存在于属性中的文件之一中locations......

例如,如果我想做类似的事情:

@TestPropertySource(
    locations = {"classpath:application.properties", "classpath:database.properties"},
    properties = {"newPortNum = #{1 + Integer.parseInt(${myapp.web.server.port.ssl})}})
Run Code Online (Sandbox Code Playgroud)

或这个:

@TestPropertySource(
    locations = {"classpath:application.properties", "classpath:database.properties"},
    properties = {"outputFile = ${outputDir}/foo.txt"})
Run Code Online (Sandbox Code Playgroud)

我需要实施 aTestExecutionListener@BootstrapWith来完成此任务吗?

Sam*_*nen 6

直接来自 Javadoc @TestPropertySource.locations()

路径中的属性占位符(即${...})将根据Environment.

...这意味着:反对任何已经添加到Environment.

另一方面,SpEL 表达式不受支持。

如果您需要以编程方式支持将 a 添加PropertySourceEnvironment,您应该实现一个ApplicationContextInitializer可以通过 注册的@ContextConfiguration(initializers = ...)

问候,

Sam (Spring TestContext 框架的作者)