如何设置第二个远程数据库进行集成测试?

时间:2019-02-11 17:43:59

标签: java postgresql spring-boot integration-testing urlconnection

我需要建议哪种方法更适合我的情况。

我有一个带有Spring Boot的Java应用程序,现在,对于测试部分,我使用localhost PostgreSQL数据库。设置非常简单;我只是在application.properties文件中有datasource.url / username / password和端口设置。

现在,我需要为特定的集成测试类使用远程PostgreSQL数据库。因此,据我所知,我至少可以通过两种方式做到这一点:

  • 我可以在application.properties中为远程数据库设置另一种配置,并在environment.getProperty()的测试类中使用它。

  • 或者,我可以使一个bean使用这些属性:

    @Bean
    public DataSource dataSource() {
        DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();
            dataSourceBuilder.url(dbUrl);
            dataSourceBuilder.username(username);
            dataSourceBuilder.password(password);
            return dataSourceBuilder.build();   
    }
    

事情并不像看起来那样简单。 我有一个用于测试配置的课程, ClassA

我有第二堂课进行了实际测试,我们称之为 ClassB

ClassB扩展了Class A,ClassA启动了一个JAR文件,这是另一个Java应用程序,它公开了一些其余的API,这些API将通过ClassB的测试进行测试。

现在我使用本地数据库,但是将来我将要使用远程数据库。

我设法从Artifactory上下载了具有Maven依赖关系的JAR文件,并在配置类中搜索JAR文件,获取了该目录,并使用一系列命令来运行它:{{1} }和{"java", "-jar", "directory.getCanonicalPath()}进行处理。

在我检查JAR文件是否已启动并正在运行之后,就会触发ClassB的测试,并且它们会对最近打开的应用程序进行CRUD操作,从而对API进行REST调用。

关于如何设置第二个远程数据库的任何建议?

谢谢!

1 个答案:

答案 0 :(得分:0)

由于您要同时使用两个数据库,因此我将为远程数据库创建一个单独的数据源:

@Configuration
public class MultipleDBConfig {
    @Bean(name = "dbRemote")
    @ConfigurationProperties(prefix = "spring.dbRemote")
    public DataSource dbRemoteDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "dbRemoteJdbcTemplate")
    public JdbcTemplate jdbcTemplate(@Qualifier("dbRemote") DataSource dbRemote) {
        return new JdbcTemplate(db1);
    }       
}

然后在您的DAO /服务中使用它们:

@Autowired 
@Qualifier("dbRemoteJdbcTemplate") 
private JdbcTemplate dbRemoteTemplate;

如果您不能直接在该测试用例中使用JdbcTemplates,那么我建议您使用Spring的RoutingDataSource。