Spring 测试环境 属性 指示测试上下文

Spring test environment property indicating a test context

spring 测试是否设置了一些环境 属性,我可以利用它有条件地使用 @ConditionalOnProperty 注释在 Spring 启动自动配置工厂的两个实现之间进行选择?

好的,所以 Spring 测试驱动程序可能会设置一个 属性。但是,我找到了一种通过 Spring 配置文件支持来实现我的用例的巧妙方法。

下面的大纲是针对 testng 框架的。我概述了 DataSource bean 的条件连接——为了集成,我创建了一个嵌入式 mysql 实例。 (将来由集成测试管理的 docker mysql 实例取代)。

第 1 步:所有集成测试都应启用集成配置文件:

// Create a TestNG Base class for integration testing.
@Test(groups = "Integration")
@ActiveProfiles("Integration")
public abstract class PayliquidAbstractTestNGIntegrationTest extends AbstractTestNGSpringContextTests {
}

// Use the base class as follows, Leave the @SpringApplicationConfiguration on The test classes as each starter module should confine the create application context to it's configuration hierarchy.
@SpringApplicationConfiguration(TestApplication.class) 
public class SomeDaoIntegrationTest extends PayliquidAbstractTestNGIntegrationTest {
//...
}

第 2 步:可以根据配置文件有条件地连接 Bean:

@Bean(name = "primaryDataSource")
@Primary
@Profile("Integration")
public DataSource primaryIntegrationDatasource() {
    return JdbcClients.getIntegrationDatasource();
}

第 3 步:也可以根据配置文件排除 Bean:

@Bean
@Primary
@Profile("!Integration")
public DataSource primaryDataSource() {
    HikariDataSource hks = new HikariDataSource(datasourceConfig);

    logger.info("HikariCP MinimumIdle={}", hks.getMinimumIdle());
    logger.info("HikariCP MaxPoolSize={}", hks.getMaximumPoolSize());

    return hks;
}