【发布时间】:2020-12-12 05:30:58
【问题描述】:
我试图在 spring-boot 应用程序的黄瓜测试模块中将数据插入数据库。
当使用测试配置文件 (mvn spring-boot:run -Dspring-boot.run.profiles=test) 启动 spring 应用程序时,它会启动应用程序并正常运行。问题是在黄瓜测试执行期间尝试设置datasource(如下面代码中指出的**行)它为空。那么我应该再次设置数据源吗?如果有怎么办。
这不是黄瓜测试相关的问题,问题是我无法访问在主应用程序中设置的数据源。
下面是代码
@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数据源
app-db-url: jdbc:oracle:....
app-db-user: USERNAME
spring:
datasource:
password: PWD
我也经历了以下解决方案
部署模块app-config.yml
....
data:
# Database
app-db-url : @@app-db-url@@
app-db-user: @@app-db-user@@
......
【问题讨论】:
-
您不能自动装配静态字段。
-
@DirkDeyne 我更改了代码以使所有内容都非静态。结果还是一样。
-
其他疑问是,这是由于测试模块资源文件夹下
application-test.yml的访问问题。我们如何验证这一点? -
进一步根据stackoverflow.com/questions/38711871/… 中的建议更改了代码(也更新了问题 sn-ps)。不过运气不好
-
顺便说一句,这种方法有意义吗?因为主要应用程序是
spring-boot而我的测试项目是黄瓜。那么@Autowire会用上面的代码加载这些实例吗?
标签: java spring spring-boot cucumber-jvm