Spring 引导从 2.2.x 升级到 2.4.x:@Test不再可以通过 application.properties 中的@activatedProperties@访问活动配置文件



我刚刚将一个项目从Spring Boot 2.2.4.RELEASE升级到2.4.5。我有一些单元测试依赖于活动Spring配置文件的设置。

应用程序属性:

spring.profiles.active=@activatedProperties@

测试现在失败了,因为替换在测试应用程序上下文中不再正确进行。

失败的测试:

@ExtendWith(SpringExtension.class)
@SpringBootTest(properties = {"spring.profiles.active=test"})
@ContextConfiguration(classes = Main.class)
@TestPropertySource(locations = "classpath:application-test.properties")
@EnableJpaRepositories(basePackages = {"myco"})
@ActiveProfiles("test")
public class GenericClientTest {
@Value("${spring.profiles.active}")
private String activeProfile; // <-- NOW gets set to "@activatedProperties@" instead of "test"
@BeforeEach
public void setUp() {
if (activeProfile.equals("test")) {
doImportantStuff();  // <-- NO LONGER make it to here
}
}

@Test
public void testNumberOne() throws ExecutionException, InterruptedException {
// stuff
}
}

这是pom.xml中的测试依赖项,它没有改变:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

我知道2.4.x会更改属性文件处理,但如果通过@activatedProperties@的配置文件替换在运行上下文中仍然有效,为什么它不再适用于@Test

显然,通过@ActiveProfiles("test")注释设置spring.profiles.active被认为是一个实现细节,并不可靠。正如本次讨论和这里所看到的,Spring Boot从v2.2.x升级到2.3.x和从2.3.x升级到2.4.x暴露了这个问题。

最佳做法是在@SpringBootTest:中显式设置配置文件

@SpringBootTest(properties = {"spring.profiles.active=test"})

这对我很有效。特别是升级到2.4.x时,建议在多文档.properties文件中创建一个特定于测试的application.properties,我也会尝试。

相关内容

  • 没有找到相关文章

最新更新