这篇文章主要介绍了spock框架中测试桩怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
when:
int a = 12;
int b = xxxService.squre(a);
int c = xxxService.plus(a, b);
then:
c == 100
假如我们需要测试以上代码,但被告知squre方法目前还没开发完成,或者正在修改中,现在使用无法得到正确的结果。
这时就可以用测试桩:给squre()方法造一个或多个假的返回值,让我们能够正常测试后面的plus()方法。
测试桩Stub与Mock的具体解释在后面代码注释中做了说明。
package com.yawn.spock
import com.yawn.spock.service.CalculateInterface
import com.yawn.spock.service.CalculateService
import spock.lang.Specification
/**
* <pre>
*
* Stub与Mock
* (1)相同点
* Stub和Mock对象都是用来模拟外部依赖,使我们能控制。
* 如果被测程序、系统或对象,我们称之为A。在测试A的过程中,
* A需要与程序、系统或对象B进行交互,那么Stub/Mock就是用来模拟B的行为来与A进行交互。
* (2)不同点
* Stub,也即“桩”,很早就有这个说法了,主要出现在集成测试的过程中,
* 从上往下的集成时,作为下方程序的替代。作用如其名,就是在需要时,
* 能够发现它存在,即可。就好像点名,“到”即可。
* Mock,主要是指某个程序的傀儡,也即一个虚假的程序,
* 可以按照测试者的意愿做出响应,返回被测对象需要得到的信息。
* 也即是要风得风、要雨得雨、要返回什么值就返回什么值。
*
* 总体来说,stub完全是模拟一个外部依赖,用来提供测试时所需要的测试数据。
* 而mock对象用来判断测试是否能通过,也就是用来验证测试中依赖对象间的交互能否达到预期。
* </pre>
* @author yawn
* 2019/6/10 14:52
*/
class MockSpec extends Specification {
def "mock 测试桩"() {
given: "构造测试桩"
CalculateInterface calculateService = Stub(CalculateInterface)
calculateService.plusPlus(_) >> 1
when:
int x = calculateService.plusPlus(12)
int y = calculateService.plusPlus(3)
then:
x == 1
y == 1
}
def "mock 测试桩得到不同的多个值"() {
given: "构造测试桩"
CalculateService calculateService = Stub(CalculateService)
calculateService.plusPlus(_) >>> [1, 2, 3]
when:
int x = calculateService.plusPlus(12)
int y = calculateService.plusPlus(3)
int z = calculateService.plusPlus(2)
then:
x == 1
y == 2
z == 3
}
}
使用Stub与Mock方法就可以得到对应的傀儡实例,我们可以对这个 傀儡 实例定义其方法的返回值。
calculateService.plusPlus(_) >> 1 // 定义了一个返回值
calculateService.plusPlus(_) >>> [1, 2, 3] // 定义了多个返回值,每次执行,按照顺序取一个作为返回值。
感谢你能够认真阅读完这篇文章,希望小编分享的“spock框架中测试桩怎么用”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/silenceyawen/blog/3096942