【发布时间】:2018-11-18 21:41:04
【问题描述】:
我如何引导我的 Spring Boot 2 集成测试,以便在所有这些测试中我可以拥有一组配置,这些配置为测试数据库预先植入一些可用于所有集成测试的测试数据?
【问题讨论】:
标签: java spring-boot integration-testing
我如何引导我的 Spring Boot 2 集成测试,以便在所有这些测试中我可以拥有一组配置,这些配置为测试数据库预先植入一些可用于所有集成测试的测试数据?
【问题讨论】:
标签: java spring-boot integration-testing
假设您使用的是 h2 测试数据库。
我的 src/test/resources/application.properties 文件有:
spring.jpa.hibernate.ddl-auto=create-drop
您需要具有以下结构的配置文件。 (这是一个位于文件夹 src/test/java 中的配置示例):
@Profile("test")
@Configuration
public class H2Config {
@Autowired
private DataSource datasource;
@PostConstruct
public void loadSQL() throws Exception {
ScriptUtils.executeSqlScript(datasource.getConnection(), new ClassPathResource("/sql/load_database.sql"));
}
}
文件'load_database.sql':(完整路径为/src/test/resources/sql/load_database.sql)
CREATE OR REPLACE TABLE OPER_DISPN(
ID NUMBER NOT NULL,
DT_VCTO_OPER DATE NOT NULL
);
INSERT INTO OPER_DISPN(ID,DT_VCTO_OPER) VALUES (1,TO_DATE('2018/09/21', 'yyyy/mm/dd'));
如果您使用映射实体(使用 @Entity)(使用 create-drop),则不需要“CREATE TABLE”部分。
现在,您所有的集成测试都插入了脚本数据
编辑:(我的测试结构) 我在 github 上创建了我的示例应用程序。请查看测试结构并运行测试:
TNotMappedRepository.testLoadDataFind()
PersonRepository.testLoadDataFind()
【讨论】:
@PostConstruct 方法被调用了两次。这是预期的吗?
@ActiveProfile 和 @Profile 注释