快速业务通道

精通Grails - 使用Grails进行单元测试(单元测试提速) - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
器,最重要的是不会发生与 Grails 相关的元编程。

回头看一下 清单 1 中 User 域类的源代码,很明显其中没有定义任何 validate() 方法。此方法(以及 save()、list()、hasErrors() 和您熟悉的所 有其他 Groovy Object Relational Mapping (GORM) 方法)都会被 Grails 在 运行时动态添加到域类中。

要运行这个将会失败的测试,在命令提示符处键入 grails test-app。您应 该看到清单 5 所示的结果:

清单 5. 控制台输出中显示的失败测试

$ grails test-app Environment set to test Starting unit tests ... Running tests of type ''unit'' ------------------------------------------------------- Running 2 unit tests... Running test UserControllerTests...PASSED Running test UserTests...            testBlank...FAILED Tests Completed in 1434ms ... ------------------------------------------------------- Tests passed: 1 Tests failed: 1 ------------------------------------------------------- Starting integration tests ... Running tests of type ''integration'' No tests found in test/integration to execute ... Tests FAILED - view reports in  /testing/test/reports.

精通Grails - 使用Grails进行单元测试(单元测试提速)(3)

时间:2010-12-03 IBM Scott Davis

在查看失败报告之前,您是否注意到单元测试运行速度很快,而在运行集成 测试时会有明显的延迟?键入 grails test-app -unit 运行单元测试。即使测 试仍然失败了,您也应该会看到测试运行速度上的显著改进。

当然,您可以键入 grails test-app -integration 来仅运行集成测试。事 实上,您甚至可以将具有单元和集成标志与测试类的名称组合在一起。键入 grails test-app -unit User 定位到您感兴趣的特定测试类。(注意,您在名 称后面省略了 Tests 后缀,能键入更少的内容始终是一件好事)。在现实世界 中,将测试限制到单个类的能力能够使您对编写测试充满信心。

知道您拥有一个失败的测试之后,您可能希望查看错误消息。在 Web 浏览器 中打开 test/reports/html/index.html。单击失败的测试类。将会看到如图 2 所示的结果:

图 2. 报告显示了失败的单元测试

No signature of method: User.validate() 错误消息证实,Grails 确实没 有将 validate() 方法元编程到 User 类上。

现在,您拥有两个选择。第一个选择是将此测试类转移到集成目录中。但是 Grails 转向运行集成测试需要很长时间,所以此选择不太理想。第二个选择是 模拟验证行为并将测试类保留在单元目录中。

理解 mockForConstraintsTests()

要在单元测试中模拟 Grails 验证,添加 mockForConstraintsTests() 方法 ,如清单 6 所示。此方法指示 Grails 将验证方法元编程到指定的域类上,就 像通常在运行时所做的一样。

清单 6. 将会通过的测试,这得益于 mockForConstraintsTests()

void testBlank() {   mockForConstraintsTests(User)   def user = new User()   assertFalse user.validate() }

现在,运行测试来验证它是否会通过,如清单 7 所示:

清单 7. 运行将会通过的测试

$ grails test-app -unit  User Environment set to test Starting unit tests ... Running tests of type ''unit'' ------------------------------------------------------- Running 1 unit test... Running test UserTests...PASSED Tests Completed in 635ms ... ------------------------------------------------------- Tests passed: 1 Tests failed: 0 -----

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