zoukankan      html  css  js  c++  java
  • 单元测试spock框架基础

    spock基础

    1:fields 字段(属性)


    2:fixture methods 骨架方法
    def setup(){} 每个功能(测试)方法之前执行的方法
    def cleanup(){} 每个功能(测试)方法之后执行的方法
    def setupSpec(){} 第一个功能(测试)方法之前执行的方法
    def cleanupSpec(){} 最后一个功能(测试)方法之后执行的方法


    3:feature methods 功能(测试)方法
    def "sum should return param1+param2"(){
    expect:
    sum.sum(1,2) == 3
    }

    4:blocks 每个feature method又被划分为不同的block,不同的block处于测试执行的不同阶段,在测试运行时,各个block按照不顺序和规则被执行
    4.1 setup/given block 在这个block中会放置与这个测试函数相关的初始化程序 *** 放在功能(测试)方法最前面 ***
    4.2 when: then: block when和then是搭配使用,在when执行待测试的函数,在when中判断是否符合预期
    4.3 assert 断言
    在expect: then:会默认assert所有返回值是boolean型的顶级语句
    异常断言 thrown(Exception)
    没有抛出异常 notThrown(Exception)

    5:where blocks
    传统的测试边界、测试异常分支,依赖反复调用:
    Math.max(1,3) == 3 Math.max(7,3) == 7 Math.max(0,0) == 0 //这里调用了三次
    spock框架,提供了优雅:
    expect:
    Math(a,b) == c
    where:
    a | b | || c
    1 | 3 | || 3
    7 | 3 | || 7
    0 | 0 | || 0

    6:交互测试(模块与模块之间) 类S,依赖类D提供的m方法
    class S{
    private D d;

    public S(D d){
    this.d = d;
    }
    public void t(){
    boolean sData = d.m(String str);
    return b ? "ok" : "fail";
    }
    }
    class D{
    public boolean m() {
    return false;
    }
    }
    测MOCK可以分为以下几个步骤:
    1) 通过Mock(D)来得到一个类D的实例; d = Mock(D)
    2) 在setup()方法中将d设置为类S的使用实例; S s = new S(d)
    3) 在given block中,给出m方法的模拟返回数据; sData = true
    4) 在when block中,调用D的方法,使用 >> 将输出指向 sData; d.m(_ as String) >> sData
    5) 在then方法中,给出判定表达式,其中判定表达式可以引用where子句的变量; s.t() == "ok"

    class STest extends Specification {
    D d = Mock(D) //step 1
    S s

    def setup() {
    s = new S(d) //step 2
    }

    def "T"() {
    given:
    def sData = true //step 3
    when:
    d.m() >> sData //step 4
    then:
    s.t() == "ok" //step 5
    }
    }


    参考文档:
    http://blog.2baxb.me/archives/1398
    http://www.mamicode.com/info-detail-2233681.html (mock)

  • 相关阅读:
    使用公钥登录SSL
    javascript看你能够做对几题
    windows 与fedora时间差
    Linux 启动直接进入 console,
    fedora -- java多版本切换
    fedora 解决yumBackend.py进程CPU占用过高
    fedora 禁止nouveau加载
    联邦学习中的隐私研究
    优秀博客链接
    【论文学习11】GIANT: Globally Improved Approximate Newton Method for Distributed Optimization
  • 原文地址:https://www.cnblogs.com/amuge/p/10770902.html
Copyright © 2011-2022 走看看