文档章节

Using Spock to test Java or Groovy applications

陈孝杰
 陈孝杰
发布于 2017/02/11 10:44
字数 475
阅读 62
收藏 0

Before

Spock是用于groovy项目的单元测试框架,这个框架简单易用,值得推广。

Coding

<dependencies>
	<dependency>
    	<groupId>org.codehaus.groovy</groupId>
    	<artifactId>groovy-all</artifactId>
    	<version>2.4.4</version>
	</dependency>
	<dependency>
    	<groupId>junit</groupId>
    	<artifactId>junit</artifactId>
   	 	<version>4.4</version>
    	<scope>test</scope>
	</dependency>
	<dependency>
   		<groupId>org.spockframework</groupId>
    	<artifactId>spock-core</artifactId>
    	<version>1.0-groovy-2.4</version>
    	<scope>test</scope>
	</dependency>
	<dependency>
    	<groupId>org.spockframework</groupId>
    	<artifactId>spock-spring</artifactId>
    	<version>1.0-groovy-2.4</version>
    	<scope>test</scope>
	</dependency>
</dependencies>
 
<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.gmaven</groupId>
            <artifactId>gmaven-plugin</artifactId>
            <version>1.5</version>
        </plugin>
    </plugins>
</build>

 

def "test when then expect"() {
        when:
        def x = Math.max(1, 2)

        then:
        x == 2

        //可以简化成下面的
        expect:
        Math.max(1, 2) == 2
    }

    def "test setup or given"() {
//        setup:
//        def stack = new Stack()
//        def elem = "push me"

        //setup 与 given 等价

        given:
        def stack = new Stack()
        def elem = "push me"

        when:
        stack.push(elem)

        then:
        !stack.empty
        stack.size() == 1
        stack.peek() == elem

        when:
        stack.pop()

        then:
        stack.empty

        when:
        stack.pop()

        then:
        //notThrown(EmptyStackException)
        def e = thrown(EmptyStackException)
        e.cause == null
    }

    def "test cleanup"() {
        setup:
        def stack = new Stack()
        def elem = "push me"

        when:
        stack.push(elem)

        then:
        elem == stack.pop()

        cleanup:
        stack = null
        elem = null
    }


    def "HashMap accepts null key"() {
        setup:
        def map = new HashMap()

        when:
        map.put(null, "elem")

        then:
        //thrown(NullPointerException)
        notThrown(NullPointerException)
    }


    def "maximum of two numbers"() {
        expect:
        // exercise math method for a few different inputs
        Math.max(1, 3) == 3
        Math.max(7, 4) == 7
        Math.max(0, 0) == 0
    }

    def "maximum of two numbers2"() {
        expect:
        Math.max(a, b) == c

        where:
        a | b || c
        3 | 5 || 5
        7 | 0 || 7
        0 | 0 || 0
    }

    @Unroll
    def "maximum of #a and #b should be #c"() {
        expect:
        Math.max(a, b) == c

        //Unroll 当成三个方法执行,否则就是在for循环里面执行
        where:
        a | b || c
        3 | 5 || 5
        7 | 0 || 7
        0 | 0 || 0
    }

explain

如上方代码所见,spock每个feature method被划分为不同的block,不同的block处于测试执行的不同阶段,在测试运行时,各个block按照不同的顺序和规则被执行,如下:

package org.spockframework.runtime.model;
public enum BlockKind {
    SETUP,//初始化资源,最前执行(与given等价)
    EXPECT,//期望,等同于assert(assert支持需要运行时配置VMOptions:java -ea)
    WHEN,//与then一起等同于expect
    THEN,//与when一起等同于expect
    CLEANUP,//清理资源,最后执行
    WHERE;//循环跑测试
}

 

spock框架重点就是上面这些block,搞定!!!

© 著作权归作者所有

陈孝杰
粉丝 4
博文 6
码字总数 5639
作品 0
武汉
程序员
私信 提问
Spock 0.6 发布,Java 测试框架

Spock 0.6 发布,Spock 0.6 增加对 Groovy 1.8, Groovy 2.0, and Grails 2.0 的支持,详细的改进记录请看这里。 Spock 是适合 Java 和 Groovy 应用程序的一个测试框架。示例代码: import g...

红薯
2012/03/06
785
0
spring4.0的一些新消息

刚刚溜达了一瞧tss,就看到了关于spring4的相关消息 For Spring Framework 4.0, our focus is on emerging enterprise themes in 2013 and beyond: First-class support for Java SE 8 based......

恺哥
2013/02/03
1K
2
Spock 简介,一个比Junit丰富的测试框架 (part 3)

今天继续聊下spock 的其他特性,如果没有看到前面的内容,可以点击这里查看前面的介绍。 1.Mocking 1.1 什么是Mocking Mocking是一种改变我们的服务与我们的服务合作的类的行为的方式。 这是...

易渡
2018/06/20
0
0
中英文对照 介绍Play Framework 框架 FAQ

经常被问到的问题 h1. Frequently Asked Questions Play和其他的框架相比怎么样 How does Play compare to framework X? 现在,在开发web应用方面,你有很多的选择。Play作为一个Java Web应用...

lyuehh
2010/07/14
1K
8
从 Java 到 Kotlin,再从 Kotlin 回归 Java

由于此博客文章引起高度关注和争议,我们认为值得在Allegro上增加一些关于我们如何工作和做出决策的背景。Allegro拥有超过50个开发团队可以自由选择被我们PaaS所支持的技术。我们主要使用Jav...

oschina
2018/05/31
17.1K
57

没有更多内容

加载失败,请刷新页面

加载更多

Mybatis Plus删除

/** @author beth @data 2019-10-17 00:30 */ @RunWith(SpringRunner.class) @SpringBootTest public class DeleteTest { @Autowired private UserInfoMapper userInfoMapper; /** 根据id删除......

一个yuanbeth
今天
4
0
总结

一、设计模式 简单工厂:一个简单而且比较杂的工厂,可以创建任何对象给你 复杂工厂:先创建一种基础类型的工厂接口,然后各自集成实现这个接口,但是每个工厂都是这个基础类的扩展分类,spr...

BobwithB
今天
4
0
java内存模型

前言 Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点。而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚。比如本文我们要讨论的JVM内存结构、Java内存模...

ls_cherish
今天
4
0
友元函数强制转换

友元函数强制转换 p522

天王盖地虎626
昨天
5
0
js中实现页面跳转(返回前一页、后一页)

本文转载于:专业的前端网站➸js中实现页面跳转(返回前一页、后一页) 一:JS 重载页面,本地刷新,返回上一页 复制代码代码如下: <a href="javascript:history.go(-1)">返回上一页</a> <a h...

前端老手
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部