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

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

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

  1. @ContextConfiguration(classes = MainApp.class, loader = SpringBootContextLoader.class)
  2. @ActiveProfiles("test")
  3. @Configuration
  4. @PropertySource({"classpath:create-sql.xml"})
  5. public class TestHelper {
  6. @Value("${CreateSql}")
  7. private String CreateSql;
  8. @Autowired
  9. private SqlQueryBuilder sqlQueryBuilder;
  10. @Autowired
  11. private NamedParameterJdbcTemplate jdbcTemplate;
  12. @Autowired
  13. private UserPreferenceFormatter formatter;
  14. @Autowired
  15. private DataSource dataSource;
  16. public static void getDataList() throws IOException {
  17. MapSqlParameterSource sqlParamSource = new MapSqlParameterSource();
  18. sqlQueryBuilder = new SqlQueryBuilder();
  19. jdbcTemplate = new NamedParameterJdbcTemplate(dataSource);****
  20. String parsedSql = sqlQueryBuilder.parseSql(CreateSql,null,null,null);
  21. List<DataSummary> dataSummaries = jdbcTemplate.query(parsedSql, sqlParamSource, new DataSummaryRowMapper(null,formatter));
  22. }
  23. ``` `application-test.yml` 包含测试模块中所有spring数据源的resources文件夹下的文件

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

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

wgeznvg71#

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

  1. @Configuration
  2. public class DataSourceConfig {
  3. @Bean
  4. public DataSource getDataSource() {
  5. DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();
  6. dataSourceBuilder.driverClassName("org.h2.Driver");
  7. dataSourceBuilder.url("jdbc:h2:mem:test");
  8. dataSourceBuilder.username("SA");
  9. dataSourceBuilder.password("");
  10. return dataSourceBuilder.build();
  11. }
  12. }

或者类似的:

  1. @Bean
  2. public DataSource getDataSource() {
  3. DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();
  4. dataSourceBuilder.username("SA");
  5. dataSourceBuilder.password("");
  6. return dataSourceBuilder.build();
  7. }

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

展开查看全部

相关问题