spock中mock和stub的区别是什么
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,这篇文章将为大家详细讲解有关spock中mock和stub的区别是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。使用stub测试桩如果我们需要测试
千家信息网最后更新 2025年12月03日spock中mock和stub的区别是什么
这篇文章将为大家详细讲解有关spock中mock和stub的区别是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
使用stub测试桩
如果我们需要测试A方法,但是E方法目前还没办法调用,或者还没开发完成。这种场景下,就可以使用stub测试桩。stub测试桩可以给E方法模拟一个或多个假的返回值,我们测试时只需要调用stub对象的E方法即可,调用后的返回值是我们在生成stub对象时指定的。如下:
def "Stub 测试桩"() { given: "构造测试桩" CalculateInterface calculateService = Stub(CalculateInterface) calculateService.plusPlus(_) >> 1 when: int x = calculateService.plusPlus(12) int y = calculateService.plusPlus(3) then: x == 1 y == 1 }上面代码中,calculateService.plusPlus(_) >> 1 给一个并未实现的plusPlus()方法指定了返回值为1,测试代码就可以直接调用这个方法了。
其中这个语句的常用格式有:
subscriber.receive(_) >> "ok"| | | || | | 生成返回值| | 参数| 方法对象
生成返回值:
// 不同参数生成不同的返回值subscriber.receive("message1") >> "ok"subscriber.receive("message2") >> "fail">通过计算生成返回值
这种方式,生成返回值的格式时一个闭包
// 1.使用方法参数计算subscriber.receive(_) >> { args -> args[0].size() > 3 ? "ok" : "fail" }// 2. 使用其他参数subscriber.receive(_) >> { String message -> message.size() > 3 ? "ok" : "fail" }如果想调用方法抛出异常
subscriber.receive(_) >> { throw new InternalError("ouch") }链式生成返回值
subscriber.receive(_) >>> ["ok", "fail", "ok"] >> { throw new InternalError() } >> "ok"上面代码中,方法被调用的前三次分别返回 "ok", "fail", "ok",第四次会抛出异常,第五次及以后调用,会返回"ok"。
以上是spock中stub测试桩的使用场景,总结为一句就是: stub测试桩给被调用者( 方法/模块)制造假的返回值,以便不影响调用者的测试。
使用mock测试桩
mock测试桩就是模拟一个测试的结果。如下图,A类调用类B和C类的某个方法:

如果要测试A的方法,但是我们没办法调用B来检测结果,就可以使用mock测试桩,生成一个B的mock对象。检验结果时,可以使用B的mock对象替代B。这个结果一般是B和C方法的调用或者状态的改变。
def subscriber = Mock(Subscriber) // 1. 创建一个mock对象 def "should send messages subscriber"() { when: publisher.send("hello") // 2. publisher 发送一个"hello" then: 1 * subscriber.receive("hello") // 3. subscriber 接收到一个"hello" 1 * subscriber.messageCount == 1 }关于spock中mock和stub的区别是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
测试
方法
生成
对象
参数
结果
代码
不同
内容
办法
场景
就是
文章
更多
格式
用者
知识
篇文章
不错
使用方法
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
ai服务器价钱
网络技术工程公司怎样起名
小学生防沉溺网络安全教育
软件开发公司的激励方案
网络技术与应用2017
需求开发迭代与软件开发迭代
网维大师服务器管理网卡
软件开发中EI指什么
网络安全班会课件免费
沪洲呜思网络技术有限公司
网络安全黑白手抄报电子版
部队招收软件开发
扫码溯源软件开发
网络安全的识别与防范
法院关于网络安全自查报告
隐藏网络安全么
中职 网络技术第四章试题
手机端如何登录云服务器
r语言抓取亚马逊数据库
襄州 软件开发技术班
广州航天服务器地址
北京学校时间频率同步服务器
生死狙击2服务器帧率是多少
辽宁东港互联网科技有限公司
数据库中被选用的关键字是
php 循环写入数据库
上海综合软件开发维修价格
考试中心网络安全应急演练脚本
mc大型小游戏服务器
谷歌学术数据库的特点