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

User.groovy

  1. package com.grailsinaction
  2.  
  3. class User {
  4.  
  5. String loginId
  6. String password
  7. String homepage
  8. Date dateCreated
  9.  
  10. static constraints = {
  11. loginId size: 3..20, unique: true, nullable: false
  12.  
  13. password size: 6..8, nullable:false
  14. homepage url: true, nullable: true
  15. }
  16. }

UserIntegrationSpec.groovy

  1. package com.grailsinaction
  2.  
  3. import grails.test.mixin.integration.Integration
  4. import grails.transaction.*
  5. import spock.lang.*
  6.  
  7. @Integration
  8. @Rollback
  9. class UserIntegrationSpec extends Specification {
  10.  
  11. def setup() {
  12. }
  13.  
  14. def cleanup() {
  15. }
  16.  
  17. def "Saving our first user to the database"() {
  18. given: "A brand new user"
  19. def joe = new User(loginId: 'Joe', password: 'secret',
  20. homepage: 'http://www.grailsinaction.com')
  21. when: "the user is saved"
  22. joe.save()
  23.  
  24. then: "it saved successfully and can be found in the database"
  25. joe.errors.errorCount == 0
  26. joe.id != null
  27. User.get(joe.id).loginId == joe.loginId
  28. }
  29.  
  30. def "Updating a saved user changes its properties"() {
  31. given: "An existing user"
  32. def existingUser = new User(loginId: 'Joe', password: 'secret',
  33. homepage: 'http://www.grailsinaction.com')
  34. existingUser.save(failOnError: true)
  35. when: "A property is changed"
  36. def foundUser = User.get(existingUser.id)
  37. foundUser.password = 'sesame'
  38. foundUser.save(failOnError: true)
  39.  
  40. then: "The change is reflected in the database"
  41. User.get(existingUser.id).password == 'sesame'
  42. }
  43.  
  44. def "Deleting an existing user removes it from the database"() {
  45. given: "An existing user"
  46. def user = new User(loginId: 'Joe', password: 'secret',
  47. homepage: 'http://www.grailsinaction.com')
  48. user.save(failOnError: true)
  49.  
  50. when: "The user is deleted"
  51. def foundUser = User.get(user.id)
  52. foundUser.delete(flush: true)
  53.  
  54. then: "The user is removed from the database"
  55. !User.exists(foundUser.id)
  56. }
  57.  
  58. def "Saving a user with invalid properties causes an error"() {
  59. given: "A user which fails several field validations"
  60. def user = new User(loginId: 'Joe', password: 'tiny',
  61. homepage: 'not-a-url')
  62. when: "The user is validated"
  63. user.validate()
  64.  
  65. then:
  66. user.hasErrors()
  67.  
  68. "size.toosmall" == user.errors.getFieldError("password").code
  69. "tiny" == user.errors.getFieldError("password").rejectedValue
  70. "url.invalid" == user.errors.getFieldError("homepage").code
  71. "not-a-url" == user.errors.getFieldError("homepage").rejectedValue
  72. !user.errors.getFieldError("loginId")
  73. }
  74.  
  75. def "Recovering from a failed save by fixing invalid properties"() {
  76. given: "A user that has invalid properties"
  77. def chuck = new User(loginId: 'chuck', password: 'tiny',
  78. homepage: 'not-a-url')
  79. assert chuck.save() == null
  80. assert chuck.hasErrors()
  81.  
  82. when: "We fix the invalid properties"
  83. chuck.password = "fistfist"
  84. chuck.homepage = "http://www.chucknorrisfacts.com"
  85. chuck.validate()
  86.  
  87. then: "The user saves and validates fine"
  88. !chuck.hasErrors()
  89. chuck.save()
  90. }
  91.  
  92. }

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

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

    简单介绍: 单元測试是软件开发的一个重要方面.毕竟,单元測试能够帮你找到bug和崩溃原因,而程序崩溃是Apple在审查时拒绝app上架的首要原因. 单元測试不是万能的,但Apple把它作为开发工具包的 ...

  2. C++ 内存模型 write_x_read_y 试例构造

    之前一段时间偶然在 B 站上刷到了南京大学蒋炎岩(jyy)老师在直播操作系统网课.点进直播间看了一下发现这个老师实力非凡,上课从不照本宣科,而且旁征博引又不吝于亲自动手演示,于是点了关注.后来开始看其 ...

  3. 33个超级有用必须要收藏的PHP代码样例

    作为一个正常的程序员,会好几种语言是十分正常的,相信大部分程序员也都会编写几句PHP程序,如果是WEB程序员,PHP一定是必备的,即使你没用开发过大型软件项目,也一定多少了解它的语法. 在PHP的流行 ...

  4. java servlet 代码样例 (demo)

    今天又搞了下jsp +servlet 的代码样例,感觉虽然搭了好多次,可是每次还是不记得那些参数,都要去网上搜索,索性自己把这次的简单demo给记录下来,供下次使用的时候直接复制吧. 这个web逻辑 ...

  5. paip.输入法编程--英文ati化By音标原理与中文atiEn处理流程 python 代码为例

    paip.输入法编程--英文ati化By音标原理与中文atiEn处理流程 python 代码为例 #---目标 1. en vs enPHati 2.en vs enPhAtiSmp 3.cn vs ...

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

    在驱动层(ring0)里执行应用层(ring3)代码,这是个老生常谈的技术,而且方法也挺多. 这种技术的本质:其实就是想方设法在驱动层里把应用层代码弄到应用层去执行. 比如在APC异步调用中,KeIn ...

  7. 在Eclipse里设置格式化代码时不格式化注释

    在Eclipse里设置格式化代码时不格式化注释 今天格式化代码 发现直接format会把注释也一块格式化了,有时候会把好好的注释弄的很乱.甚为头疼. 查阅之后解决办法如下: Windows -> ...

  8. 自己改写了一个图片局部放大的jquery插件页面里面的html代码少了,同一个页面可以调用多个

    自己改写了一个图片局部放大的jquery插件页面里面的html代码少了,同一个页面可以调用多个,兼容ie8以上浏览器,别忘了引用jquery,我用的jquery/1.11.0/其他版本没有测试,另外需 ...

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

    首先,这个问题不应该出现在这里,因为以前在用ThinkPHP3.1.2的时候,利用富文本编辑器保存文本后,直接从数据库里面取出的数据都能正常显示,改用ThinkPHP3.2.3之后,thinkphp从 ...

随机推荐

  1. [App Store Connect帮助]三、管理 App 和版本(3)查找 App

    在“我的 App”中,使用工具栏控件快速查找 App. 搜索 App: 在搜索栏中输入文本. 您可以输入 App 的名称.Apple ID(App 标识符).套装 ID,或 SKU.套装 ID 和 S ...

  2. 在 kafka 的 broke 和 client 之间加入 SSL 双向认证

    在 kafka 的 broke 和 client 之间加入 SSL 双向认证https://blog.csdn.net/hohoo1990/article/details/79110031 kafka ...

  3. Objective-C——Runtime理解

    动态语言 OC是一门不折不扣的动态语言,所以它的很多机制都是动态运行时决定的.这点和C语言不一样,C语言是静态绑定,也就是编译后所有的一切都已经决定了.这一点和C语言的函数指针有些类似,很多时候函数指 ...

  4. java攻城师之路--复习java web之Cookie_Session

    Servlet技术 用来动态生成 网页数据资源Servlet生成HTML 页面数据时,所有内容都是通过 response.getWriter response.getOutputStream 向浏览器 ...

  5. 使用whIle循环语句和变量打印九九乘法表

    -设置i变量declare @i int --设置j变量declare @j int --设置乘法表变量declare @chengfabiao varchar(1000)--给i,j,@chengf ...

  6. 2015.12.20-2015.12.25 大论文迭代 A

    进一步充实大论文内容.结构,完善一遍大论文 12.20周天,完成论文第五章总结部分,和第一章的修改 12.21周一,完成论文第二章的修改充实 12.22周二,完成论文第三章的修改充实 12.23周三, ...

  7. (转) Hibernate检索方式概述

    http://blog.csdn.net/yerenyuan_pku/article/details/70554816 Hibernate检索方式概述 我们在对数据库的操作中,最常用的是select, ...

  8. SQL查询性能优化

    使用高效的查询 使用 EXISTS 代替 IN -- 查询A表中同时存在B表的数据 -- 慢 SELECT * FROM Class_A WHERE id IN (SELECT id FROM Cla ...

  9. Bomb HDU - 3555

    Bomb HDU - 3555 求1~n中含有49数的个数 #include<bits/stdc++.h> #define LL long long using namespace std ...

  10. 求n!(高精度问题)

    #include <iostream> #include <stdio.h> #define MAX 10000 using namespace std; void Mul(i ...