Grails里的集成测试代码试例

测试的命令,3和2不一样了,要找找。。

User.groovy

package com.grailsinaction

class User {

    String loginId
    String password
    String homepage
    Date dateCreated

    static constraints = {
      loginId size: 3..20, unique: true, nullable: false

      password size: 6..8, nullable:false
      homepage url: true, nullable: true
    }
}

UserIntegrationSpec.groovy

package com.grailsinaction

import grails.test.mixin.integration.Integration
import grails.transaction.*
import spock.lang.*

@Integration
@Rollback
class UserIntegrationSpec extends Specification {

    def setup() {
    }

    def cleanup() {
    }

    def "Saving our first user to the database"() {
            given: "A brand new user"
            def joe = new User(loginId: ‘Joe‘, password: ‘secret‘,
                                homepage: ‘http://www.grailsinaction.com‘)
            when: "the user is saved"
            joe.save()

            then: "it saved successfully and can be found in the database"
            joe.errors.errorCount == 0
            joe.id != null
            User.get(joe.id).loginId == joe.loginId
        }

        def "Updating a saved user changes its properties"() {
            given: "An existing user"
            def existingUser = new User(loginId: ‘Joe‘, password: ‘secret‘,
                                homepage: ‘http://www.grailsinaction.com‘)
            existingUser.save(failOnError: true)
            when: "A property is changed"
            def foundUser = User.get(existingUser.id)
            foundUser.password = ‘sesame‘
            foundUser.save(failOnError: true)

            then: "The change is reflected in the database"
            User.get(existingUser.id).password == ‘sesame‘
        }

        def "Deleting an existing user removes it from the database"() {
            given: "An existing user"
            def user = new User(loginId: ‘Joe‘, password: ‘secret‘,
                                homepage: ‘http://www.grailsinaction.com‘)
            user.save(failOnError: true)

            when: "The user is deleted"
            def foundUser = User.get(user.id)
            foundUser.delete(flush: true)

            then: "The user is removed from the database"
            !User.exists(foundUser.id)
        }

        def "Saving a user with invalid properties causes an error"() {
            given: "A user which fails several field validations"
            def user = new User(loginId: ‘Joe‘, password: ‘tiny‘,
                                    homepage: ‘not-a-url‘)
            when: "The user is validated"
            user.validate()

            then:
            user.hasErrors()

            "size.toosmall" == user.errors.getFieldError("password").code
            "tiny" == user.errors.getFieldError("password").rejectedValue
            "url.invalid" == user.errors.getFieldError("homepage").code
            "not-a-url" == user.errors.getFieldError("homepage").rejectedValue
            !user.errors.getFieldError("loginId")
        }

        def "Recovering from a failed save by fixing invalid properties"() {
            given: "A user that has invalid properties"
            def chuck = new User(loginId: ‘chuck‘, password: ‘tiny‘,
                                    homepage: ‘not-a-url‘)
            assert chuck.save() == null
            assert chuck.hasErrors()

            when: "We fix the invalid properties"
            chuck.password = "fistfist"
            chuck.homepage = "http://www.chucknorrisfacts.com"
            chuck.validate()

            then: "The user saves and validates fine"
            !chuck.hasErrors()
            chuck.save()
        }

}

时间: 2024-11-06 04:07:03

Grails里的集成测试代码试例的相关文章

block,__bridge_retained代码试例

typedef void (^dd)(void); @property (strong) dd a ; @property (copy) dd a ; __weak id b=self; self.a=^{ NSLog(@"%@",self); }; 编译器都会有警告:循环引用造成的内存泄露 --------------------------------------------------- CFMutableArrayRef cfObject = NULL; { id obj =

[iOS翻译]《iOS7 by Tutorials》在Xcode 5里使用单元測试(上)

简单介绍: 单元測试是软件开发的一个重要方面.毕竟,单元測试能够帮你找到bug和崩溃原因,而程序崩溃是Apple在审查时拒绝app上架的首要原因. 单元測试不是万能的,但Apple把它作为开发工具包的一部分,不仅让你创作的APP更稳定,并且提供了一致.有趣的用户体验,这些都是让用户给你五星评价的源泉.iOS7提供了一个升级的单元測试框架.让你在Xcode中执行单元測试更为easy.当你完毕这一章节,你将学会怎样给现有app加入測试--并有可能培养出对编写測试的热爱! /* 本文翻译自<iOS7

在.NET Fiddle沙箱里玩转代码

在.NET Fiddle沙箱里玩转代码 作者:Tony Patton | 托尼·巴顿翻译:PurpleEndurer,2014-11-18,第1版 C#和VB.NET开发人员可以使用.NET Fiddle在浏览器窗口中运行调试代码,并通过URL共享代码. jsFiddle是我最喜欢的在线工具之一,因为它可以让你在浏览器中轻松地测试和构造JavaScript,HTML和CSS.让我做梦也没想到.NET开发者会拥有这样的工具,但.NET Fiddle为C#和VB.NET开发人员带来同样的功能. 总的

mysql导出文件到txt并指定字段分隔符;mysql导出到xls文件sql试例

mysql > select m.asset_id, m.asset_name, m.director, m.actor, m.country_of_origin, m.years, concat('http://192.167.1.120:15414/',p.poster_url),m.category  from ao_movie_tab m, ao_poster_tab p where m.asset_id = p.asset_id group by m.asset_id order by

驱动里执行应用层代码之KeUserModeCallBack(WOW64是由三个动态库wow64.dll wow64win.dll wow64cpu.dll来实现)

在驱动层(ring0)里执行应用层(ring3)代码,这是个老生常谈的技术,而且方法也挺多. 这种技术的本质:其实就是想方设法在驱动层里把应用层代码弄到应用层去执行. 比如在APC异步调用中,KeInsertQueueApc,KeInitializeApc等函数中可设置一个在ring3层执行一个回调函数,这样就可以回到应用层去执行代码了. 再比如在驱动中查找某个进程的一个线程,然后挂起它,把他的EIP指向需要执行的一段代码(把驱动层需要注入的这段代码叫ShellCodde), 执行完之后再回到线

zookeeper实战:SingleWorker代码样例

们需要一个“单点worker”系统,此系统来确保系统中定时任务在分布式环境中,任意时刻只有一个实例处于活跃:比如,生产环境中,有6台机器支撑一个应用,但是一个应用中有30个定时任务,这些任务有些必须被在“单线程”环境中运行(例如“数据统计”任务),避免并发的原因不是在java层面,可能是在操作db数据时,或者是在消息消费时,或者是信息推送时等.某个指标的“数据统计”任务,每天只需要执行一次,即使执行多次也是妄费,因为这种类型的定时任务,需要被“单点”.同时,如果一个任务在没有报告结果的情况下异常

神经网络:caffe特征可视化的代码样例

caffe特征可视化的代码样例 不少读者看了我前面两篇文章 总结一下用caffe跑图片数据的研究流程 deep learning实践经验总结2--准确率再次提升,到达0.8,再来总结一下 之后,想知道我是怎么实现特征可视化的. 简单来说,其实就是让神经网络正向传播一次,然后把某层的特征值给取出来,然后转换为图片保存. 下面我提供一个demo,大家可以根据自己的需求修改. 先看看我的demo的使用方法. visualize_features.bin net_proto pretrained_net

thinkphp从数据库里的html代码显示页面不解析

首先,这个问题不应该出现在这里,因为以前在用ThinkPHP3.1.2的时候,利用富文本编辑器保存文本后,直接从数据库里面取出的数据都能正常显示,改用ThinkPHP3.2.3之后,thinkphp从数据库里的html代码显示页面不解析,直接显示源代码了,这个问题其实很简单,只是当时很着急,没有想到. 一般出现问题之后,要从源头开始思考,找原因,不是立即百度或Google.今早起来的时候想了一下,所有的数据文件都是从我的数据库里面显示出来的,问题应该就出现在数据的获取和数据的展示途中.果然,打开

java的二重循环代码样例

1.计算三个班的平均分 import java.util.Scanner; public class AvgScore{ public static void main (Sting[] args){ int[] score = new int[]; //成绩数组 int classNum = 3;        //班级数量 double sun = 0.0;       //成绩总和 double[] average = new  double[classNum];//平均成绩数组 //循环