乐趣区

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

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 的测试报告:

  • 有没有惊喜!!!

技术类文章精选

  • java 一行代码打印心形
  • Linux 性能监控软件 netdata 中文汉化版
  • 接口测试代码覆盖率(jacoco)方案分享
  • 性能测试框架
  • 如何在 Linux 命令行界面愉快进行性能测试
  • 图解 HTTP 脑图
  • 将 swagger 文档自动变成测试代码
  • 五行代码构建静态博客
  • 基于 java 的直线型接口测试框架初探
  • JUnit 中用于 Selenium 测试的中实践

非技术文章精选

  • 为什么选择软件测试作为职业道路?
  • 写给所有人的编程思维
  • 成为优秀自动化测试工程师的 7 个步骤
  • 手动测试存在的重要原因
  • 成为自动化测试的 7 种技能
  • 自动化和手动测试,保持平衡!
  • 自动化测试生命周期
  • 如何在 DevOps 引入自动化测试

大咖风采

  • Tcloud 云测平台 – 集大成者
  • Android App 测试工具及知识大集合
  • 4399AT UI 自动化 CI 与 CD
  • Android App 常规测试内容
  • JVM 的对象和堆

退出移动版