快速业务通道

精通Grails: 测试 Grails 应用程序 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
urn val.after(obj.checkIn)    })   }   //the rest of the class remains the same }

val 变量是当前的字段。obj 变量表示当前的 HotelStay 实例。Groovy 将 before() 和 after() 方 法添加到所有 Date 对象,所以这个验证仅返回 after() 方法调用的结果。如果 checkOut 发生在 checkIn 之后,验证返回 true。否则,它返回 false 并触发一个错误。

现在,输入 grails run-app。确保不能创建一个 checkOut 日期早于 checkIn 日期的新 HotelStay 实例。如图 10 所示:

图 10. 默认的定制验证错误消息

精通Grails: 测试 Grails 应用程序 - 编程入门网

打开 grails-app/i18n/messages.properties,并向 checkOut 字段添加一个定制验证消息: hotelStay.checkOut.validator.invalid=Sorry, you cannot check out before you check in。

保存 messages.properties 文件并尝试保存有缺陷的 HotelStay。您将看到如清单 11 所示的错误消 息:

清单 11. 定制验证错误消息

精通Grails: 测试 Grails 应用程序 - 编程入门网

精通Grails: 测试 Grails 应用程序(10)

时间:2011-07-29 IBM Scott Davis

现在应该编写测试了,如清单 12 所示:

清单 12. 测试定制的验证

import java.text.SimpleDateFormat class HotelStayTests extends GroovyTestCase {   void testCheckOutIsNotBeforeCheckIn(){    def h = new HotelStay(hotel:"Radisson")    def df = new SimpleDateFormat("MM/dd/yyyy")    h.checkIn = df.parse("10/15/2008")    h.checkOut = df.parse("10/10/2008")    assertFalse "there should be errors", h.validate()    def badField = h.errors.getFieldError(''checkOut'')    assertNotNull "I''m expecting to find an error on the checkOut field", badField    def code = badField?.codes.find {it == ''hotelStay.checkOut.validator.invalid''}    assertNotNull "the checkOut field should be the culprit", code   } }

测试定制的 TagLib

接下来是最后一个需要处理的用户场景。您已经在 create 和 edit 视图中成功地处理了 checkIn 和 checkOut 的时间戳部分,但它在 list 和 show 视图中仍然是错误的,如图 12 所示:

图 12. 默认的 Grails 日期输入(包括时间戳)

精通Grails: 测试 Grails 应用程序 - 编程入门网

最简单的解决办法是定义一个新的 TagLib。您可以利用 Grails 已经定义的 <g:formatDate> 标记,但创建一个自己的定制标记也很容易。我想创建一个可以以两种方式使用的 <g:customDateFormat> 标记。

一种形式的 <g:customDateFormat> 标记打包一个 Date,并接受一个接受任何有效 SimpleDateFormat 模式的定制格式属性:

<g:customDateFormat format="EEEE">${new Date()}</g:customDateFormat>

因为大多数用例都以美国的 “MM/dd/yyyy” 格式返回日期,所以如果没有特别指定,我将采用这种 格式:

<g:customDateFormat>${new Date()}</g:customDateFormat>

精通Grails: 测试 Grails 应用程序(11)

时间:2011-07-29 IBM Scott Davis

现在,您已经知道了每个用户场景的需求,那么请输入 grails create-tag-lib Date(如清单 13 所 示),以创建一个全新的 DateTagLib.groovy 文件和一个相应的 DateTagLibTests.groovy 文件:

清单 13. 创建一个新的 TagLib

$ grails create-tag-lib Date [copy] Copying 1 file to /src/trip-planner2/grails-app/taglib Created TagLib for Date [copy] Copying 1 file to /src/trip-planner2/test/integration Created TagLibTests for Date

将清单 14 中的代码添加到 DateTagLib.groovy:

清单 14. 创建定制

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号