【问题标题】:One off configuration for a @SpringBootTest@SpringBootTest 的一次性配置
【发布时间】:2018-11-18 21:41:04
【问题描述】:

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

【问题讨论】:

    标签: java spring-boot integration-testing


    【解决方案1】:

    假设您使用的是 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

    【讨论】:

    • 感谢@ThiagoChagas 的建议。这是利用 Spring 的 DI 框架吗?我试了一下,但我看到 Configuration 类和 @PostConstruct 方法被调用了两次。这是预期的吗?
    • 不,这不是预期的。我用我的应用程序进行了测试,但是它只通过了一次。我将添加有关我的测试结构的更多信息。
    • @n00b 我已经看到如果您的脚本有错误它将运行两次(配置部分)。有错误日志吗?
    • 感谢您的回购链接。我错过了 @ActiveProfile@Profile 注释
    猜你喜欢
    • 2021-05-01
    • 2020-01-02
    • 2021-09-18
    • 2020-12-14
    • 2018-03-13
    • 2019-05-09
    • 2020-05-23
    • 2017-09-28
    • 2020-06-18
    相关资源
    最近更新 更多