gpt4 book ai didi

grails - 每次测试后,geb 是否会将数据库回滚到其原始状态?

转载 作者:行者123 更新时间:2023-12-02 08:35:37 28 4
gpt4 key购买 nike

我已经在 Grails 上尝试使用 Geb,但是没有很多关于它的行为的文档。例如,geb 如何处理回滚?据我观察,它运行应用程序并在浏览器本身上运行测试,而无需在测试之间将其关闭。

当一个规范(规范 A)改变一个对象(对象 Z),并且在一些测试之后,另一个规范(规范 B)改变同一个对象时,数据库数据会发生什么?每次运行规范时,geb 是否会将数据库回滚到其原始状态?我试图确认,因为我的geb测试在单独执行时运行良好,但是当我将它们作为套件运行时,其中一些测试失败了,我能想到的最好的原因是数据不处于原始状态当对其进行第二次测试时。有什么想法吗?

最佳答案

一般来说,Geb 测试和功能测试与单元测试和集成测试有很大不同。单元测试和集成测试在同一个 JVM 中运行,测试运行器在每个测试之前启动一个事务,并在测试运行后回滚它,这具有重置数据库的效果,但实际上它只是阻止测试更改数据库。但是在测试开始之前插入数据库的任何数据(例如来自 BootStrap)都将存在于每个测试中。

但功能测试通常在一个 JVM 中运行,但它们会对在第二个 JVM 中运行的应用程序进行远程调用。这限制了您在测试期间可以执行的操作,例如您无法操作元类,或更改 Spring bean 实例变量,并且无法启动和回滚事务以隔离测试之间的数据更改。您可以执行这些操作中的任何操作,但它们只会影响本地 JVM。

Geb 当然可以远程进行这些更改,但这需要修改您的应用程序以添加 Controller 或进行远程调用的其他方式,但事实并非如此。

一般来说,测试不应该排序并且应该是独立的,但是我发现在进行功能测试时,打破该规则并对它们进行排序是有意义的,其中早期的测试进行一些插入或其他更改,而稍后的测试则进行一些插入或其他更改根据先前的更改进行进一步的工作和/或检查。我还添加了仅测试 Controller 操作,可用于回滚更改(通过事务或删除插入的数据、撤消更新和删除等)并进行其他更改以协助测试,但这必须是仔细完成以确保它仅在测试期间可用并且不会成为重大安全风险。

关于grails - 每次测试后,geb 是否会将数据库回滚到其原始状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26044158/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com