java .stub 用法_Spock测试桩stub的使用

Spock测试桩stub的使用

2019-08-17 01:25:59.0

stub测试桩 使用场景

when:

int a = 12;

int b = xxxService.squre(a);

int c = xxxService.plus(a, b);

then:

c == 100

假如我们需要测试以上代码,但被告知squre方法目前还没开发完成,或者正在修改中,现在使用无法得到正确的结果。

这时就可以用测试桩:给squre()方法造一个或多个假的返回值,让我们能够正常测试后面的plus()方法。

测试桩Stub与Mock的具体解释在后面代码注释中做了说明。

stub测试桩 使用实例

package com.yawn.spock

import com.yawn.spock.service.CalculateInterface

import com.yawn.spock.service.CalculateService

import spock.lang.Specification

/**

*

 
 

*

* Stub与Mock

* (1)相同点

* Stub和Mock对象都是用来模拟外部依赖,使我们能控制。

* 如果被测程序、系统或对象,我们称之为A。在测试A的过程中,

* A需要与程序、系统或对象B进行交互,那么Stub/Mock就是用来模拟B的行为来与A进行交互。

* (2)不同点

*   Stub,也即“桩”,很早就有这个说法了,主要出现在集成测试的过程中,

* 从上往下的集成时,作为下方程序的替代。作用如其名,就是在需要时,

* 能够发现它存在,即可。就好像点名,“到”即可。

*   Mock,主要是指某个程序的傀儡,也即一个虚假的程序,

* 可以按照测试者的意愿做出响应,返回被测对象需要得到的信息。

* 也即是要风得风、要雨得雨、要返回什么值就返回什么值。

*

*   总体来说,stub完全是模拟一个外部依赖,用来提供测试时所需要的测试数据。

* 而mock对象用来判断测试是否能通过,也就是用来验证测试中依赖对象间的交互能否达到预期。

*

* @author yawn

* 2019/6/10 14:52

*/

class StubSpec extends Specification {

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

}

def "Stub 测试桩得到不同的多个值"() {

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] // 定义了多个返回值,每次执行,按照顺序取一个作为返回值。

2019-08-17 01:25:59.0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值