在 grails 中使用 mockDomain 时如何覆盖方法的逻辑?

2024-06-18

我想像往常一样模拟一个域(mockDomain(Class)),但我想覆盖域的方法之一(beforeDelete具体来说)仅针对该单元测试使用自定义逻辑。

如何才能实现这一目标?


您可以使用 Groovy 元类重写域类上的 beforeDelete 方法。

域类:

class Person {
  String name
  boolean deleted

  def beforeDelete() {
    println "Deleting Person ${id}"
    deleted = true
    return false
  }
}

单元测试:

void testBeforeDelete() {
    mockDomain(Person)
    def p = new Person(name:"test")
    p.save()
    assertEquals false, p.deleted
    p.delete()
    assertEquals true, p.deleted
}

--testBeforeDelete 的输出--

删除人员 1

void testBeforeDeleteOverrideBeforeDelete() {
    mockDomain(Person)
    Person.metaClass.'static'.beforeDelete = {println 'Do not touch me'}
    def p = new Person(name:"test")
    p.save()
    assertEquals false, p.deleted
    p.delete()
    assertEquals true, p.deleted
}

--testBeforeDeleteOverrideBeforeDelete 的输出--

不要碰我

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

在 grails 中使用 mockDomain 时如何覆盖方法的逻辑? 的相关文章

随机推荐

  • .Net Standard项目,如何使用System.ServiceModel类

    我已将 PCL 项目转换为 Net Standard 1 5 项目 我已经从 nuget 安装了 System ServiceModel 包 但找不到使用 System ServiceModel 命名空间的方法 任何帮助表示赞赏 安装 Sy
  • linux-x64 二进制文件无法在 linuxmusl-x64 平台上使用错误

    我正在安装Sharp用于使用 package json 的 Nodejs 项目的 docker 映像上的映像压缩包 当我创建容器时 我收到有关 Sharp 包的以下错误 app node modules sharp lib libvips
  • 在 Rails 中呈现路由错误的 404 页面

    我试图在 Rails 中渲染集成的 404 页面作为例外 我尝试了这个 但仍然收到路由错误页面 posts controller rb def destroy if current user username post email post
  • 使用 PropertyEditor (ControlsFX) 的属性表示例

    我一直在寻找使用 ControlsFX 属性表的任何好例子 但除了这个之外找不到任何东西 在此示例中 包含 NameItem 对象的 ObservableList 项被添加到其构造函数中的 PropertySheet 对象中 就像文档所述一
  • Ubuntu 16 LTS - Eclipse 窗口首选项无法正常工作

    我刚刚安装了 Ubuntu 16 04 LTS 我于 3 月 2 日下载了适用于 Linux 64 位的全新 Eclipse 我使用的是最新的 Oracle 热点 JDK 1 8 update 91 版本 在尝试启用 Eclipse 常规首
  • 如何在 Snowflake 中编写等效的 IF ELSE 即席 SQL 查询

    我正在尝试创建一个与以下基于 T SQL 的即席查询等效的 Snowflake T SQL version Declare i int 0 If i 0 PRINT 0 Else Begin PRINT 1 RETURN PRINT 2 E
  • 使用 Hibernate 防止 SQL 注入

    我正在使用 Hibernate 我知道你可以使用 HQL 来防止 SQL 注入 String query1 from Obj where id id String query2 from Obj where id id query1不安全
  • 使用 webkit 转换 Html 到 PDF

    从 Html 生成 PDF 时 webkit 转换不起作用 我需要将 div 旋转 45 度 使用 webkit 变换后 它在屏幕上看起来没问题 但使用 winnovatives Html 到 PDF 转换器时 输出是平坦的而不是旋转的 有
  • 订阅的角度替代方案?

    我使用的是异步订阅 因此计数器变量在更新之前被返回 是否有另一种订阅方法 允许我仅在计数器变量更新为从后端获取的值后才返回计数器变量 makeOffer product string offer number number let form
  • redux 和 React 中减速器的先前状态

    这是我的减速器的样子 export default function catalogReducer state initialState catalogItems action switch action type case types L
  • 将 HTML 转换为 Excel 的最佳方法是什么

    我有一个 HTML 页面 其中包含 Flash 图表 FusionCharts 和 HTML 表格 我需要将这整个事情转换成Excel HTML 表格应显示在 Excel 工作表的单元格中 Flash 图表可以显示为图像 我们可以使用任何开
  • 使用.NET Core 3.0添加swagger时出现异常

    我正在尝试将 swagger 融入ASP NET Core 3 0项目 它在中抛出异常ConfigureServices method 我在用Swashbuckle AspNetCore 4 0 1 我也检查过这个issue https s
  • TortoiseGit - 更改默认合并消息

    系统描述 Windows 7的 git版本2 10 1 windows 1 乌龟Git 2 3 0 0 I want 合并提交消息在不同的情况下有所不同fully自动方式 no manual amend Summary 在windows上
  • C# 控制台应用程序 - cmd.exe 挂起

    我在 Visual Studio 2013 中运行简单的 C 控制台应用程序时遇到问题 我的问题的详细信息 我成功运行控制台应用程序 默认的 按任意键继续 显示在最后 突然 它开始表现出不同的行为 并出现以下症状 一个新的命令窗口 cmd
  • android studio 和 netbeans 中输入扫描器和解析的不同行为

    我正在使用 NetBeans 测试基本代码 和 Android Studio 实际应用程序 读取相同的管道分隔文件 并得到不同的结果 这是有问题的代码 String URL http CalendarUTF8 Dec2016 txt try
  • Facebook C# SDK,用图片创建事件

    我想创建一个事件 但我只是不知道如何更改事件图片 我知道这是一个非常老的问题 但我仍然找不到任何解决方案 我很快就会放弃 请至少告诉我这是来自 Facebook 的错误还是其他任何东西 这是我的代码 Facebook FacebookCli
  • 正则表达式:如何匹配所有大于 954 的数字?

    I tried 0 9 d d 4 但它没有给出正确的结果 I 不会使用正则表达式因为你会陷入丑陋的模式链中 但是 如果仍然必须或想要使用它 您可以使用如下正则表达式 1 9 d 3 9 6 9 d 9 5 9 2 工作演示 https r
  • 如何在node.js中同步读取文件或Stream?

    请不要讲授关于我应该如何异步完成所有事情的讲座 有时我想以简单明显的方式做事 这样我就可以继续其他工作 由于某种原因 以下代码不起作用 它与我在 a 上找到的代码匹配最近的问题 https stackoverflow com questio
  • 如何在 apache Spark 作业中执行阻塞 IO?

    如果当我遍历 RDD 时 我需要通过调用外部 阻塞 服务来计算数据集中的值怎么办 您认为如何才能实现这一目标 值 Future RDD Double Future sequence tasks 我尝试创建一个 Futures 列表 但由于
  • 在 grails 中使用 mockDomain 时如何覆盖方法的逻辑?

    我想像往常一样模拟一个域 mockDomain Class 但我想覆盖域的方法之一 beforeDelete具体来说 仅针对该单元测试使用自定义逻辑 如何才能实现这一目标 您可以使用 Groovy 元类重写域类上的 beforeDelete