@SpringBootTest 的一次性配置

One off configuration for a @SpringBootTest

我如何 bootstrap 我的 Spring Boot 2 集成测试,以便在所有这些测试中我可以拥有一组配置,这些配置预先为测试数据库植入一些测试数据,这些数据可以是在所有集成测试中使用?

假设您正在使用 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()

Github: https://github.com/thiagochagas/insert-data-tests