前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >spock框架中测试桩的使用 转

spock框架中测试桩的使用 转

作者头像
yawn
发布2019-08-24 19:14:22
9090
发布2019-08-24 19:14:22
举报

使用场景

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

本文转载自:jvm123-java技术分享站 

原文链接:http://jvm123.com/2019/08/spock-ce-shi-zhuang/

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用场景
  • 使用实例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档