spock中mock和stub的区别是什么
发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,这篇文章将为大家详细讲解有关spock中mock和stub的区别是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。使用stub测试桩如果我们需要测试
千家信息网最后更新 2025年02月04日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安全错误
数据库的锁怎样保障安全
上元教育软件开发
嵌入式系统的软件开发平台
软件开发项目如何调研
三级网络技术工作文案
华为服务器售后
网络安全无处不在作文
网络文明网络安全宣传活动
常见流媒体服务器方案对比分析
数据库筛选与查询教学设计
软件开发周期怎么计算
软件开发任务分解wbs
服务器pci万兆网卡
商丘信通网络技术有限公司
emp在数据库中是什么意思
数据库 键
嵌入式软件开发和软件开发就业
江阴ibm服务器维修服务站
清华金融研究数据库
凡科互联网科技有限公司待遇
数据库原理二
数据库(备用 只读)
杭州凯发网络技术有限公司
星之辰服务器维修
网络安全制度的安全活动记录
数据库逻辑模型符号含义
游戏服务器管理员打不开
html 加载数据库
文登数据库恢复
饥荒联机服务器模组丢失
搭建物联网服务器