Spring引导单元测试@ActiveProfiles导致无法加载applicationContext错误

时间:2015-02-18 05:48:03

标签: java spring spring-boot

我想为运行unitTest提供不同的数据库,而不是使用默认的生产数据库。我想过用profile来解决这个问题。 这是spring4启动项目,因此所有内容都有注释。 这就是我在做的事情:

在src / main / resources下,我放了application.properties

spring.datasource.url=jdbc:postgresql://localhost:5432/services
spring.datasource.username=postgres
spring.datasource.password=postgres
spring.datasource.driver-class-name=org.postgresql.Driver

在src / test / resources下,我放了application-test.properties

spring.datasource.url=jdbc:postgresql://localhost:5432/services_test
spring.datasource.username=postgres
spring.datasource.password=Hercules1
spring.datasource.driver-class-name=org.postgresql.Driver

然后,我在测试之前放了@ActiveProfiles("test"),现在当我运行单元测试时,我立即遇到了这个错误:

  

java.lang.IllegalStateException:无法加载ApplicationContext

我搜索了很多内容,没有任何东西可以解决这个错误。

你能指出我的解决方案有什么问题吗?

由于

1 个答案:

答案 0 :(得分:-2)

-test添加到application.properties后,不会使属性成为您激活的配置文件的候选对象。您需要执行以下操作:

数据源配置界面:

public interface DatasourceConfig {
    public void setup();
}

测试数据源配置:

@Component
@Profile("test")
public class ProductionDatasourceConfig implements DatasourceConfig {
    @Override
    public void setup() {
        // Set up your test datasource
    }
}

生产数据源配置:

@Component
@Profile("prod")
public class ProductionDatasourceConfig implements DatasourceConfig {
    @Override
    public void setup() {
        // Set up your prod datasource
    }
}

激活个人资料:

@ActiveProfiles("test")

根据环境注入数据源:

@Autowired
DatasourceConfig datasourceConfig;

以XML格式声明的Bean也可以映射到配置文件,如下所示:

<beans profile="dev">
    <bean id="devDatasourceConfig" class="org.profiles.DevDatasourceConfig" />
</beans>

<beans profile="prod">
    <bean id="productionDatasourceConfig" class="org.profiles.ProductionDatasourceConfig" />
</beans>