快速业务通道

精通Grails: 创建自定义插件 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
oes not set transactional = false

Grails 试图在数据库事务中包含所有测试。在普通的 Grails 应用程序中,这不成问题。但是您在一 个插件中而不是在应用程序中,因此您不能假定存在这样一个数据库。您可以安装 Hibernate 插件,或 者按照错误消息的指示在集成测试中设置 def transactional = false。

输入 grails test-app 并验证您的测试是否通过。

我还要实现一个 URL 缩短服务,以便这个插件的用户可以选择其中一个服务。

创建 IsGd 类

这个 Is.Gd(读作 is good)服务号称能够提供比 TinyUrl.com 更短的域名和编码 URL。访问 http://is.gd 试验这个 Web 界面。

为了再次表示我这种长短反差的偏好,我将借此机会向您展示我在 TinyUrl.groovy 中使用过的那个 两行方法(参见 清单 3)的更长实现。如果服务失败,这个实现将提供更多信息以便做出相应反应。在 src/groovy/org/grails/shortenurl 中创建 IsGd.groovy,如清单 6 所示。

清单 6. IsGd 实用程序类

package org.grails.shortenurl class IsGd{   static String shorten(String longUrl){    def addr = "http://is.gd/api.php?longurl=${longUrl}"    def url = addr.toURL()    def urlConnection = url.openConnection()    if(urlConnection.responseCode == 200){     return urlConnection.content.text    }else{     return "An error occurred: ${addr}\n" +     "${urlConnection.responseCode} : ${urlConnection.responseMessage}"    }   } }

精通Grails: 创建自定义插件(4)

时间:2011-08-02 IBM Scott Davis

如您所见,清单 6 的响应代码为 200 —— 表示 OK 的 HTTP 响应代码(参见 参考资料 了解关于 HTTP 响应代码的更多信息)。为简便起见,调用失败时仅返回错误消息。但使用现成的扩展结 构,您可以多次重新尝试调用或将故障转移到另一个 URL 缩短服务,从而使这个方法更健壮。

在 test/integration/org/grails/shortenurl 目录中创建对应的 IsGdTests.groovy 文件,如清单 7 所示 。输入 grails test-app 并确认 IsGd 类工作正常。

清单 7. 测试 IsGd 类 package org.grails.shortenurl class IsGdTests extends  GroovyTestCase{  def transactional = false  void testShorten (){   def shortUrl = IsGd.shorten("http://grails.org")   assertEquals  "http://is.gd/2oCZR", shortUrl  }  void testBadUrl(){   def shortUrl = IsGd.shorten("IAmNotAValidUrl")   println shortUrl   assertTrue shortUrl.startsWith("An error occurred:")  } }

传递 IAmNotAValidUrl 时,IsGd 服务将失败。要了解该服务是如何失败的详细信息,建 议您跳到命令行并使用 curl 命令,如清单 8 所示。(cURL 实用程序是 UNIX®/Linux®/Mac OS X 上的原生命令,可以下载 Windows® 版本,参见 参考资料)。在浏览器中测试错误的 URL 可以看 到错误消息,但看不到错误代码。使用 cURL,您可以清楚地看到,Web 服务返回一个 500 代码,而不是 预期的 200。

清单 8. 使用 curl 查看失败 Web 服务类的细节

$ curl --verbose  "http://is.gd/api.php?longurl=IAmNotAValidUrl" * About to connect() to is.gd port 80 (#0) *  Trying 78.31.109.147... connected * Connected to is.gd (78.31.109.147) port 80 (#0) > GET /api.php?longurl=IAmNotAValidUrl HTTP/1.1 > User-Agent: curl/7.16.3 (powerpc-ap

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号