Grails 3.0.9:Spock 集成测试的 @Rollback 注释不起作用

2024-01-08

我目前正在为我们的项目进行一些集成(或功能性,我不是真正的 QA,而是后端开发人员,所以我可能会草率地使用术语)REST 测试,我们正在使用 Grails 3.0.9、Spock Framework 1.0 -Groovy-2.4 和 PostgreSQL DB 用于测试。

此外,我们有单独的数据库用于测试目的,每次测试后回滚更改仍然至关重要。我已经看过了Grails 测试文档 http://grails.github.io/grails-doc/3.0.x/guide/testing.html#integrationTesting并试图使用@Rollback如示例中所述的注释 - 它只是不起作用,更改仍然提交给数据库。

由于它是工作项目,我无法提供一些真实的代码片段,希望您理解,尽管我的测试规范看起来就像 Grails 文档示例中的那样:扩展自Specification, @Integration和圣杯的@Rollback注释用于类级别。

import grails.transaction.Rollback
import grails.test.mixin.integration.Integration

@Integration
@Rollback
class SomeSpec extends Specification {

@Shared
RESTClient client

def setup() {
    client = new RESTClient('http://localhost:8080')
}

我已经尝试了一切:分别对每个方法使用@Rollback,尝试使用Spring的@Rollback同样,示例也是错误的 - 它不能应用于类,只能应用于方法,我尝试使用@Transactional相反 - 没有成功。

另外我应该提到我正在使用的控制器和服务被注释为 Grails'@Transactional,尽管删除所有注释并没有改变任何东西。

我用谷歌搜索了一整天,但找不到任何有用的东西,因为这些解决方案主要针对 Grails 2,所以我相信我的问题是独一无二的。其中一些解决方案建议使用 IntegrationSpec 而不是 Specific,报告它按预期工作,但它在 Grails 3 中被删除并替换为@Integration,所以我相信这对我来说不是一个选择。

我还发现了很多@Transaction解决方案,但这些也没有帮助,尽管我在尝试应用这些解决方案时有可能做错了什么。

因此,目前唯一的选择是尝试使测试尽可能独立于数据,并在每个测试套件之后删除并重新创建数据库,但在我看来,这是非常糟糕的解决方案。我相信没有人遇到和我一样的问题,所以我希望找到一些可以接受的解决方案。当然,我很乐意提供我忘记提及的任何缺失信息。

UPDATE: 我已经尝试过提到的解决方法here https://github.com/grails/grails-core/issues/616- 我已经使用了事务性,正如我之前所描述的,它仍然没有效果,更改仍然被提交,尽管我为每个测试收到了这对消息,这意味着它实际上正在尝试做某事。不确定它会有帮助,但它是这样的(稍作编辑):

INFO org.springframework.test.context.transaction.TransactionContext - Began transaction (1) for test context [DefaultTestContext@3dbe8e11 testClass = SomeSpec, testInstance = package.SomeSpec@5e2296ae, testMethod = $spock_feature_0_0@SomeSpec, testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@6ec335b0 testClass = SomeSpec, locations = '{}', classes = '{class package.Application}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.IntegrationTest=true}', resourceBasePath = '', contextLoader = 'grails.boot.config.GrailsApplicationContextLoader', parent = [null]]]; transaction manager [org.grails.orm.hibernate.GrailsHibernateTransactionManager@25870a3a]; rollback [true] INFO org.springframework.test.context.transaction.TransactionContext - Rolled back transaction for test context [DefaultTestContext@3dbe8e11 testClass = SomeSpec, testInstance = package.SomeSpec@5e2296ae, testMethod = $spock_feature_0_0@SomeSpec, testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@6ec335b0 testClass = SomeSpec, locations = '{}', classes = '{class package.Application}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.IntegrationTest=true}', resourceBasePath = '', contextLoader = 'grails.boot.config.GrailsApplicationContextLoader', parent = [null]]].


用注释测试类

@WebIntegrationTest
@Transactional

注释方法为

@Rollback

对包装的 DataSource 进行操作

org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy
.newInstance(dataSource)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Grails 3.0.9:Spock 集成测试的 @Rollback 注释不起作用 的相关文章

  • 事务管理器未回滚 Spring Batch 作业

    我遇到一个挑战 我需要从 SQL Server 数据库读取 未处理 的数据 处理数据 然后有选择地更新 DB2 数据库中的两到六个表 然后将该数据标记为在 SQL Server 上的原始数据库中已处理 在任何时候 如果出现任何问题 我希望回
  • 如何在视图中调用 Grails 服务?

    简单的问题 我有一个服务类 比方说helpersService 和一个方法def constructURI params 如何从模板视图调用此方法 我尝试了以下代码但没有成功 img src 但我得到以下结果 No signature of
  • 配置Spring的MappingJacksonHttpMessageConverter

    我在用MappingJacksonHttpMessageConverter在 Spring MVC 中自动序列化对象 如下所示 RequestMapping value getAccount method RequestMethod GET
  • Spring Data Jpa项目使用ManyToMany关系时生成查询

    我有以下实体映射 Entity Table name books public class Book implements Serializable ManyToMany JoinTable name books2categories jo
  • Jenkins 管道中的动态变量与 Groovy 方法变量

    我在 Groovy 中有一个用于声明性管道的 Jenkinsfile 以及两个创建的 Jenkins 变量 其名称为 OCP TOKEN VALUE ONE 和 OCP TOKEN VALUE TWO 以及相应的值 当我尝试传递方法变量并在
  • Google App Engine 的 Spring 框架支持

    Google App Engine 支持 Spring 框架吗 如果通过说 Google Apps 您实际上是在谈论 Google App Engine 如标签所示 那么 大部分 看 我指向缓存的页面 因为 它会在 App Engine 中
  • 启动时修改@RequestMappings

    是否可以更改 RequestMapping启动时的值 基本上我想要的是创建一个注释 Api Api Version V1 这意味着请求映射应该修改为 api dogs to api v1 dogs 我想在类级别 适用于所有 和方法级别 重新
  • Groovy 和 Groovy++,它们有什么不同吗?

    我最近知道groovy 已经发布了 Groovy和Groovy 的主要区别是什么 来自 groovy 页面http code google com p groovypptest http code google com p groovypp
  • Jenkins 管道和 java.nio.file.* 方法的问题

    我正在尝试使用 java nio file 中的方法在 Jenkins 管道中执行一些基本文件操作 无论代码存在于哪个节点块中 代码都在主节点上执行 在管道中 我已经验证了各个节点块都是正确的 它们唯一地标识了特定的节点 但是 pathEx
  • 使用 Spring Boot 的 Flyway Core 给出错误 'delayedFlywayInitializer' 和 'entityManagerFactory' 之间的循环依赖关系

    我想在 SQL Server 数据库上导入一些数据 我使用的是 Spring Boot 2 3 4 我还使用 Hibernate 来生成表 我在pom中添加了flyway核心
  • Grails 默认包名称

    我是 Grails 的新手 而且非常喜欢它 我想将我的课程放在像这样的包中org company project module model 重复对我来说很痛苦create domain class
  • Spring MVC - 自动查找验证器

    假设我有一个像这样的示例实体类 public class Address 和相应的验证器 Component public AddressValidator implements Validator Override public bool
  • Mockito mockStatic 无法解析符号

    我正在使用 Spring Boot 并在单元测试中 我试图模拟Files delete myFile toPath method 为此 我尝试使用Mockito mockStatic 方法 但是当我尝试使用它时 我的 IDE Intelli
  • 在spring mvc中修改请求URI

    我有一个基于 spring mvc 的应用程序 我想在请求 URI 到达控制器之前修改它 例如 控制器的 RequestMapping 是 abc xyz 但传入的请求是 abc 1 xyz 我想修改传入请求以将其映射到控制器 解决方案1
  • @Transactional 注解属于哪里?

    如果您将 Transactional in the DAO类和 或其方法 或者注释使用 DAO 对象调用的服务类是否更好 或者注释两个 层 是否有意义 我认为事务属于服务层 它是了解工作单元和用例的人 如果您将多个 DAO 注入到需要在单个
  • Tomcat下的Spring CXF Soap Web服务:找不到服务

    我正在尝试使用 CXF 和 Spring 设置一个在 Tomcat 上运行的简单 CXF Web 服务 我有一个 Web 应用程序初始化程序来引导 CXF servlet public class WebAppInitializer ext
  • Grails Asset-pipeline 不加载角度部分模板

    我将 angular ui bootstrap 与 Grails 2 3 x asset pipeline 1 6 1 插件一起使用 其中一个组件 alert js 正在尝试加载 template alert alert html 但这会解
  • grails/mysql 时区更改

    完成更改应用程序时区的最佳方法是什么 在我看来 必须发生以下情况 服务器 TZ 已被系统管理员更改 mysql必须重新启动 数据库中每个基于时间的列都必须使用convert tz 或等效方法更新所有值 因此 要么必须编写一个 mysql 脚
  • GWT、Maven、Spring - 在 Maven 构建上获取 com.thoughtworks.qdox.parser.ParseException:语法错误

    我正在尝试集成此演示中的代码 http code google com p gwt spring starter app http code google com p gwt spring starter app 进入我的主要 Spring
  • Tomcat 6 未从 WEB-INF/lib 加载 jar

    我正在尝试找出我的 tomcat 环境中的配置问题 我们的生产服务器正在运行 tomcat 安装并从共享 NFS 挂载读取战争 然而 当我尝试使用独立的盒子 及其配置 进行同样的战争时 我收到下面发布的错误 有趣的是 如果我将 WEB IN

随机推荐

  • php检查数组值是否重复[重复]

    这个问题在这里已经有答案了 我有以下数组 PHP arr array A A B C 我想检查值 如果值重复则必须发出警报错误 PHP chk array count values array if chk 0 lt 1 chk 2 lt
  • Visual Studio 2015突然不想在类中创建新变量[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我几乎一整天都在为这个问题苦苦挣扎 我在互联网上找不到任何答案 我知道这个修复只是为了改变一件小事 但我不知道是哪一件 卸载 使用
  • SQL LIKE % 未搜索

    我想使用 SQL LIKE 函数执行简单的搜索 不幸的是 由于某种原因 它似乎不起作用 下面是我的代码 private void gvbind connection Open string sql if txtSearch Text Tri
  • 将小数转换为另一种基数的时间复杂度

    这是计算十进制数的基本版本的代码 我不确定它的时间复杂度 谢谢 public static String convertToBase int num int base if base gt 36 throw new IllegalArgum
  • 我有一个包含 14 个静态方法和 4 个静态属性的类 - 这很糟糕吗?

    我一直在编写一个 PHP 类 该类正好有 450 行长 它包含 14 个静态方法和 4 个静态属性以及 6 个常量 以及私有 construct and clone 我想知道我是不是做错了什么 我的班级是邪恶的吗 当您使用该类时 您总是调用
  • Firebase 的喜欢/不喜欢功能

    该系统本身很容易理解 但实施起来却很棘手 此外 安全原因让我思考如何做到这一点 我正在考虑让该功能在前端 Firebase 脚本中工作 只需执行所有操作即可检查该用户是否已经发布了喜欢 不喜欢的内容 并在用户单击时删除 添加 切换 问题在于
  • 更改 Rmarkdown pdf 中 Kable 的字体

    当编织为pdf时 有没有办法改变Rmarkdown中kable的字体 我可以找到很多有关更改大小或粗体等的信息 但不能找到有关更改实际字体的信息 我只想要一些无衬线的东西 降价文档示例 title R Notebook output pdf
  • 设置默认日期时间格式c#

    有没有办法设置或覆盖整个应用程序的默认日期时间格式 我正在用 C Net MVC 1 0 编写一个应用程序 并使用大量泛型和反射 如果我可以将默认的 DateTime ToString 格式重写为 dd MMM yyyy 则会简单得多 当站
  • WPF:使用旋转方块进行碰撞检测

    参考这个编程游戏 https stackoverflow com questions 505040 developing a robocode type game with net for a school assignment我目前正在建
  • PHP 的怪癖和陷阱 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • + 运算符与 parseFloat

    实施例1 http knockoutjs com documentation extenders html淘汰扩展器页面的 描述了一种对用户输入进行四舍五入并确保它只是数字的方法 它工作得很好 但是查看源代码 他们做了一件我不明白的奇怪的事
  • PageRequest 构造函数已被弃用

    我正在使用 Spring Data Commons v2 快照 并且我看到PageRequest已被弃用 这似乎发生在M1 http docs spring io spring data commons docs 2 0 0 M1 api
  • 通过 Connector/NET 使用 MySQL 的 C#

    我正在 C 4 0 Framework 中开发 CMS 应用程序 它连接到远程服务器上的 MySQL 数据库 5 0 95 由 MySQL 连接器 6 5 4 提供 我在执行查询时遇到问题 例如 我的连接字符串 Server Options
  • 在jar文件中的类中调用静态方法[重复]

    这个问题在这里已经有答案了 我想在 jar 文件中的类中执行特定方法 该文件没有 main 方法 使用我尝试过的 java 命令java cp classes jar com example test Application但我收到这个错误
  • QTreeWidget editItem 失败并显示“编辑:编辑失败”

    我有一个QTreeWidgetItem添加到QTreeWidget QTreeWidgetItem item new QTreeWidgetItem ui gt trwPairs item gt setFlags item gt flags
  • 使用 Matplotlib 模拟 Origin 中的瀑布图

    我正在尝试使用 Python 和 Matplotlib 创建 Origin 制作的瀑布图 见下图 or 一般方案对我来说很有意义 你从一个 2D 矩阵开始 就像你想制作一个曲面图一样 然后你可以遵循中显示的任何食谱StackOverflow
  • 为什么 unsigned int 还是有符号的? [复制]

    这个问题在这里已经有答案了 我创建了一个 unsigned int 和 unsigned char 然后我分配 10 值 并且 char 保持无符号并给我一个值 246 但 unsigned int 取 10 值 include
  • 从结构体向量中,获取一个收集每个结构体的字段之一的向量

    假设我有以下结构 struct Point double X Y Z 和以下向量 std vector
  • 如何测试某个值是否在某个范围内?

    我希望能够创建一个Range http doc rust lang org std ops struct Range html然后测试变量是否包含在该范围内 看起来像这样的东西 fn main let a 3 5 assert a cont
  • Grails 3.0.9:Spock 集成测试的 @Rollback 注释不起作用

    我目前正在为我们的项目进行一些集成 或功能性 我不是真正的 QA 而是后端开发人员 所以我可能会草率地使用术语 REST 测试 我们正在使用 Grails 3 0 9 Spock Framework 1 0 Groovy 2 4 和 Pos