java—在cucumber测试模块中使用主应用程序数据源—spring boot应用程序

lnxxn5zx  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(460)

我试图在spring启动应用程序的cucumber tests模块中将数据插入数据库。
当用测试配置文件启动spring应用程序时( mvn spring-boot:run -Dspring-boot.run.profiles=test )它启动应用程序并正常运行。问题是在测试执行期间尝试设置 datasource (正如下面代码中的**行所指出的)它是空的。我应该重新设置数据源吗?如果是,怎么办。
这不是 cucumber 测试相关的问题,问题是我不能访问的数据源已设置在主应用程序。
下面是代码

@ContextConfiguration(classes = MainApp.class, loader = SpringBootContextLoader.class)
    @ActiveProfiles("test")
    @Configuration
    @PropertySource({"classpath:create-sql.xml"})
    public class TestHelper {

        @Value("${CreateSql}")
        private String CreateSql;

        @Autowired
        private SqlQueryBuilder sqlQueryBuilder;

        @Autowired
        private NamedParameterJdbcTemplate jdbcTemplate;

        @Autowired
        private UserPreferenceFormatter formatter;

        @Autowired
        private DataSource dataSource;

    public static void getDataList() throws IOException {

            MapSqlParameterSource sqlParamSource = new MapSqlParameterSource();
            sqlQueryBuilder = new SqlQueryBuilder();

            jdbcTemplate = new NamedParameterJdbcTemplate(dataSource);****

            String parsedSql = sqlQueryBuilder.parseSql(CreateSql,null,null,null);
            List<DataSummary> dataSummaries = jdbcTemplate.query(parsedSql, sqlParamSource, new DataSummaryRowMapper(null,formatter));
        }
``` `application-test.yml` 包含测试模块中所有spring数据源的resources文件夹下的文件

app-db-url: jdbc:oracle:....
app-db-user: USERNAME
spring:
datasource:
password: PWD

我也经历了下面的解决方案
解决方案-1
解决方案-2
部署模块 `app-config.yml` ```
....
data:
    # Database
    app-db-url : @@app-db-url@@
    app-db-user: @@app-db-user@@
......
wgeznvg7

wgeznvg71#

看起来您缺少定义该数据源bean的代码。你应该有这样的东西:

@Configuration
public class DataSourceConfig {

    @Bean
    public DataSource getDataSource() {
        DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();
        dataSourceBuilder.driverClassName("org.h2.Driver");
        dataSourceBuilder.url("jdbc:h2:mem:test");
        dataSourceBuilder.username("SA");
        dataSourceBuilder.password("");
        return dataSourceBuilder.build();
    }
}

或者类似的:

@Bean 
public DataSource getDataSource() { 
    DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create(); 
    dataSourceBuilder.username("SA"); 
    dataSourceBuilder.password(""); 
    return dataSourceBuilder.build(); 
}

其余的属性可以进入一个属性文件。

相关问题