【问题标题】:How properly prepopulate DB for integration tests with Spock and Spring Boot如何正确预填充 DB 以使用 Spock 和 Spring Boot 进行集成测试
【发布时间】:2016-11-15 13:09:52
【问题描述】:

我可能会提供我的问题的完整 GitHub 示例,但目前我只是在问 - 也许有人遇到了类似的问题。

问题是 - 使用 Spock 和 Spring Boot 我想运行集成测试并在“设置”方法中预填充 H2 数据库的本地实例。我创建了几个可以互为父对象的对象。所以我创建例如。 Human1 和 Human2,从序列中获取它们生成的 ID,然后以 Human1 id 作为“parentId”属性准备 REST JSON 调用,并对 API 进行 POST 以创建以 Human1 作为父级的 Human3。

我的 API 解析检索到的 DTO,提取“parentId”值,并使用带有方法“findOne(id)”的存储库执行搜索。问题是在这个阶段存储库声称数据库中没有内容(在适当的表中)。

我尝试过使用 @Transactional(它在我的 Spock 规范和映射器类的方法上),在设置中保存和刷新,分别刷新存储库和其他数千个东西,但似乎没有任何效果。所以请 - 如果有人至少能阐明这个问题,我将不胜感激。

【问题讨论】:

  • 您可以在下方添加您的答案并自行接受。这样,问题将被标记为“已回答”,并有助于其他用户。

标签: hibernate spring-boot integration-testing spring-data-jpa spock


【解决方案1】:

所以我终于偶然发现了 @BeforeTransaction 注释,它就像一个魅力。我将我的数据库插入/删除逻辑放在使用 @BeforeTransaction 注释的单独方法中,并在单独事务中的每个测试方法之前调用,该单独事务在与测试方法关联的其他方法开始之前关闭。这样就解决了问题。

【讨论】:

    猜你喜欢
    • 2014-08-15
    • 2017-06-28
    • 2019-04-22
    • 1970-01-01
    • 2018-02-01
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    • 2019-01-27
    相关资源
    最近更新 更多