如何正确地用Spock和Spring Boot预填充DB进行集成测试



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

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

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

我试过用@Transactional(它既在我的Spock规范上,也在mapper类的方法上),在设置中保存和刷新,分别刷新两个存储库和成千上万的其他东西,但似乎没有任何工作。所以,如果有人能对这个问题提出一点建议,我将非常感激。

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

最新更新