Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在Grails 3.2中如何测试服务中事件的触发?

在Grails 3.2中如何测试服务中事件的触发?
EN

Stack Overflow用户
提问于 2017-02-13 23:35:56
回答 3查看 510关注 0票数 1

我在Grails 3.2.5上运行,并实现了一个简单的服务。该服务有一个私有方法和一个公共方法。私有方法触发事件的notify方法(由EventBus特征提供)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Transactional
class SyncService {
    def processQueue() {
        checkStatus(true)
    }

    private checkStatus(status) {
       if(status) {
           def model = [...]
           notify "status.completed", model
       }
    }
}

如何为该服务编写单元测试,以检查通知是否已被触发?以下实现不起作用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@TestFor(SyncService)
class SyncServiceSpec extends Specification {

    void "test if notification is triggerd() {
        when:
            service.processQueue()

        then: "notification should be triggered"
            1 * service.notify(_)

    }
}

测试失败,输出如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Too few invocations for:

1 * service.notify(_)   (0 invocations)

谢谢你的帮忙!

EN

回答 3

Stack Overflow用户

发布于 2017-12-19 16:38:23

您可以模拟事件总线并在模拟上执行交互测试(在3.2.11中测试)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@TestFor(SyncService)
class SyncServiceSpec extends Specification {

  void 'test if notification is triggered'() {
    given: 'a mocked event bus'
    EventBus eventBusMock = Mock(EventBus)
    service.eventBus = eventBusMock

    when:
    service.processQueue()

    then: 'event bus is notified once'
    1 * eventBusMock.notify(*_)  //<--- you could get more specific with your arguments if you want

  }
}
票数 2
EN

Stack Overflow用户

发布于 2017-02-14 08:01:04

下面的表达式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 * service.notify(_)

表示使用任何单个参数调用notify方法。

试试这个:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 * service.notify(*_)

PS在“调用次数太少:”消息之后还有其他信息吗?有什么被调用的例子吗?

票数 1
EN

Stack Overflow用户

发布于 2017-02-15 21:35:51

为了测试事件,我发现了一种变通方法。我不是检查notify方法是否被触发,而是使用on方法测试事件是否被触发。因此,在我的测试类中,我有如下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@TestFor(SyncService)
class SyncServiceSpec extends Specification {

    void "test if notification is triggerd() {
        when:
            def eventResponse = null
            service.processQueue()
            service.on('status.completed') { data ->
                eventResponse = data
            }


        then: "notification should be triggered"
            eventResponse != null

    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42215436

复制
相关文章
在 Eclipse 中配置 Grails 工程
配置 GRAILS_HOME,注意一定要配置到 build.xml 所在的文件夹:
四火
2022/07/15
1.1K0
在 Eclipse 中配置 Grails 工程
vue中在父组件点击按钮触发子组件的事件
1、父组件的button元素绑定click事件,该事件指向notify方法 2、给子组件注册一个ref=“child” 3、父组件的notify的方法在处理时,使用了$refs.child把事件传递给子组件的parentMsg方法,同时携带着父组件中的参数msg 4、子组件接收到父组件的事件后,调用了parentMsg方法,把接收到的msg放到message数组中
江一铭
2022/06/16
6.3K0
Jenkins触发构建--事件触发
事件触发就是发生了某个事件就触发pipeline执行,这个事件可以是你能想到的任何事件,比如手动在界面上触发、其它job主动触发、HTTP API Webhook触发等。
陈不成i
2021/06/02
5.9K0
代码触发,手动触发touchstart事件,touch事件,click事件,自定义事件
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/150775.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/06
4.9K0
jquery中失去焦点事件_easyui失去焦点事件没触发
事件会在获得焦点的时候触发,既可以是鼠标行为,也可以是按tab键导航触发的行为,并且绑定一个处理方法。
全栈程序员站长
2022/09/20
4.8K0
onbeforeunload事件_pageload事件何时触发
注意:为了防止不需要的弹出窗口,浏览器可能不会显示在beforeunload事件处理程序中创建的提示,除非页面已与之交互,甚至根本不显示它们。
全栈程序员站长
2022/11/03
3K0
DataGrid中DropDownList的动态绑定和触发DropDownList事件[通俗易懂]
我在写DataGrid控件中子控件事件时候,DropDownList的事件相比而言麻烦一点,在此,我简单罗列如下(我在此处为了方便这里都用DataGrid中的隐藏列存储我所要的数据):
全栈程序员站长
2022/10/01
1.1K0
aos 事件触发失败
项目中遇到这个问题,网页往下滑动时加载 aos 事件触发不了,原因也很简单,因为 aos.js 是在页面加载时获取页面高度从而绑定一些事件进去,但是如果这个文件加载速度比框架加载的快,会导致两者高度不一致,从而动画效果触发失败。
子舒
2023/08/23
3620
在React 中如何处理事件?
在 React 中处理事件有几种常见的方式,具体取决于你使用的是类组件还是函数组件。
王小婷
2023/10/08
1890
触发器在渗透中的利用
0x01 什么是触发器: 触发器对表进行插入、更新、删除的时候会自动执行的特殊存储过程。触发器一般用在check约束更加复杂的约束上面。触发器和普通的存储过程的区别是:触发器是当对某一个表进行操作。诸如:update、insert、delete这些操作的时候,系统会自动调用执行该表上对应的触发器。SQL Server 2005中触发器可以分为两类:DML触发器和DDL触发器,其中DDL触发器它们会影响多种数据定义语言语句而激发,这些语句有create、alter、drop语句。 0x02 问题描述: a)通
逸鹏
2018/04/09
1.5K0
触发器在渗透中的利用
js触发全屏事件
让用户端JS触发指的就是让用JS监听用户的操作事件,通过JS程序去实现F11全屏。这个事件可以是一个按钮的点击事件,当然也可以是键盘事件,比如用户按下F11。     1.F11键盘事件触发   当用户按下F11事件,浏览器为触发自身全屏功能,这个过程我们一般是不可控制的,即使是监听了F11的键盘事件,退出全屏的时候,我们也捕捉不到退出全屏触发的事件。所以,我们就用程序自己去实现F11的功能,首先需要禁用浏览器默认的事件动作。
山河木马
2019/03/05
16K0
golang怎么触发读事件的?
首先我们了解一个结构体。golang中所有的网络事件和文件读写都用fd进行标识(位于internal包下)。
用户7705674
2021/09/24
1.4K0
使用eventBus事件的重复触发事件问题的解决
在单页应用中,在 A 页面中触发事件,然后在 B 页面中对这个事件进行响应是一个很常见的需求,那么当有这种需求的时候要怎么实现呢。有两种方案可以实现:
用户2305169
2018/07/24
3.7K0
小程序如何避免多次点击,重复触发事件
作为前端开发,我们经常会遇到的场景,比如用户点击获取验证码按钮时,没有反应,大部分用户都会接着点击,这就会造成用户收到多条验证码,这是因为后台api请求比较慢,而客户端体验又做得不到位,导致用户以为没点击到或者是页面假死,在上次请求还没处理完,就再次点击按钮。这对于我们开发来说,这是bug。
honey缘木鱼
2018/09/26
6.3K0
DevOps 测试在企业中如何落地?
互联网时代,企业越来越注重产品的快速迭代与交付,当然产品质量也是举足轻重。企业在有限的资源情况下,快速的步调意味着更多的挑战,本次演讲重点在于测试人员如何无缝连接客诉,运营,产品,研发,运维以及高效快速搭建DevOps测试体系从而保证产品快速交付的质量。
DevOps时代
2018/08/01
1.3K0
DevOps 测试在企业中如何落地?
js 手动触发input事件
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/138867.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/02
10.7K0
spreadTrading模块事件触发机制
本文主要介绍了价差交易模块的事件触发机制。感谢‘次第花开’和‘用户名呀’在维恩的派论坛里的分享!
用Python的交易员
2018/07/26
2.5K0
spreadTrading模块事件触发机制
WPF 多个 StylusPlugIn 的事件触发顺序
如果在 WPF 使用 StylusPlugIn 同时在同一个界面用多个元素都加上 StylusPlugIn 那么事件触发的顺序将会很乱 我建议是不要让 StylusPlugIn 有重叠,在没有理解 StylusPlugIn 之前请不要写出让 StylusPlugIn 有重叠的代码。因为可能有小伙伴移动了一个元素就让你的代码的行为和之前写的不一样
林德熙
2022/08/04
7680
探索 Flutter 模拟事件触发
如果可以模拟 PointerEvent 进行分发,那么在应用中就可以通过 代码 来触发手势事件,这样就能解放双手。如果结合语音监听,通过代码处理,说话也能触发手势操作,岂不美哉。 作为探索完 手势机制 和 滑动机制 ,又有完成这两本小册的我,感觉这个问题应该可解。下面就将整个问题的解决过程进行梳理,带大家再认识一下手势底层的相关实现。
张风捷特烈
2022/03/18
2.8K0
探索 Flutter 模拟事件触发
点击加载更多

相似问题

在集成测试期间不会触发Grails hibernate事件

12

如何测试触发事件?

10

如何测试事件触发

10

Spock在Grails中测试POST服务

16

如何防止laravel在测试中触发事件?

222
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文