FunTester Groovy 单元测试框架 spock 基础功能 Demo

FunTester · 2020年04月01日 · Modified By Admin 026 · 780 次阅读

spock 是一款全能型的单元测试框架。

最近在做单元测试框架的调研和尝试,目前确定的方案框架包括是:spock,Junit,Mockito 以及 powermock。由于本身使用 Groovy 的原因,比较钟情于 spock 框架,但是奈何兼容性比较差,特别是跟 Mockito 等框架的高级语法的兼容。不过这不妨碍 spock 是一个非常优秀的单元测试框架,特别体现在用例的形式和测试报告的展示方式以及报错信息的展示(这个我最中意)。

在简单看过官方文档之后做了一些简单的 Demo,分享给大家。(官方文档貌似有段时间没有更新了,如果用的话建议升级最新版)

package com.FunTester.spock.pratice

import org.slf4j.Logger
import spock.lang.Shared
import spock.lang.Specification

import static com.fun.frame.SourceCode.getLogger

class test01 extends Specification {

    @Shared
    int a = 10;

    @Shared
    Logger logger = getLogger(this.getClass().getName())

    def setupSpec() {
        logger.info "测试类开始! ${logger.getName()}"
    }

    def setup() {
        logger.info "测试方法开始!"
    }

    def "这是一个测试"() {
        given: "准备测试数据"
        def s = 3
        def ss = 3
        expect: "验证结果"
        s == ss
    }

    def "表达式测试,表达式左右运算符号"() {
        given: "准备数据"

        expect: "测试方法"
        z == x + y

        where: "校验结果"
        x | y || z
        1 | 0 || 1
        2 | 1 || 3
    }

    def "表达式测试,表达式左右对象方法"() {
        expect:
        name.size() == length
        where:
        name      | length
        "Spock"   | 5
        "Kirk"    | 4
        "Scotty"  | 6
        "Sc3otty" | 7
    }

    def "表达式测试,表达式左右对象方法,数组表示测试数据"() {
        expect:
        name.size() == length
        where:
        name << ["fjdslj", "fds"]
        length << [6, 3]
    }

    def "校验对象"() {
        given:
        def per = new Per("fun", 12)
        expect:
        with(per) {
            name == "fun"
            age == 12
        }
    }


    def "when then结构测试"() {
        when:
        def s = plus(3, 2)
        def ss = plus(3, 2)
        then:
        verifyAll {
            s == 3
            ss == 3
        }
    }

/**
 * 测试方法
 * @param i
 * @param j
 * @return
 */
    def plus(int i, int j) {
        i
    }

/**
 * 测试类
 */
    class Per {

        Per(String name, int age) {
            this.name = name
            this.age = age
        }

        String name

        int age


    }
}

展示一下 spock 的测试报告:

spock测试报告
spock测试报告

  • 有没有惊喜!!!

技术类文章精选

非技术文章精选

大咖风采

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册