快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
,mockForConstraintsTests() 还接受第二个参数:一个用于模拟真 实数据库表的域类列表(替代真实的数据库表)。清单 11 演示了使用模拟表测 试 unique 约束的过程:

清单 11. 使用模拟表测试 unique 约束

void testUniqueLogin (){   def jdoe = new User(name:"John Doe",             login:"jdoe",             password:"password")   def suziq = new User(name:"Suzi Q",              login:"suziq",              password:"wordpass")   mockForConstraintsTests(User, [jdoe, suziq])   def jane = new User(login:"jdoe")   assertFalse jane.validate()   assertEquals "unique", jane.errors["login"] }

在内存中模拟数据库表可以节省大量时间,尤其是在启动实际数据库需要很 长时间时。更糟的是,一旦数据库开始运行,您仍然需要确保使用使您的断言得 以通过所必需的记录来填充数据库表。

我并不是暗示运行对生产数据库运行实际的集成测试时浪费时间。我的意思 是,这些耗时的集成测试更适合于持续集成服务器。在这种情况下,模拟数据库 交互可以使您专注于 Grails 功能,只花少部分时间来进行测试。

模拟数据库表已超出了 mockForConstraintsTests() 方法的能力范围。您可 以使用 mockDomain() 方法完成这件事。

理解 mockDomain()

GORM 将一些有用的方法元编程到域类上: save()、list() 和许多定位程序 ,比如 findAllByRole()。顾名思义,mockForConstraintsTests() 方法将验证 方法添加到域类上,以进行测试。mockDomain() 方法将持久性方法添加到域类 上,以进行测试。清单 12 展示了 mockDomain() 方法的实际应用:

清单 12. 使用 mockDomain() 测试 GORM 方法

void  testMockDomain(){   def jdoe = new User(name:"John Doe", role:"user")   def suziq = new User(name:"Suzi Q", role:"admin")   def jsmith = new User(name:"Jane Smith", role:"user")   mockDomain(User, [jdoe, suziq, jsmith])   //dynamic finder   def list = User.findAllByRole("admin")   assertEquals 1, list.size()   //NOTE: criteria, Hibernate Query Language (HQL)   //   and Query By Example (QBE) are not supported }

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

时间:2010-12-03 IBM Scott Davis

mockDomain() 方法尽可能忠实地建模 GORM 行为。例如,当您将一个域类保 存到模拟表在中时,会像在实际应用程序中一样填充 id 字段。id 值只是列表 中元素的序数值。清单 13 展示了在单元测试中保存 域类:

清单 13. 将一个域类保存到单元测试中

void testMockGorm() {   def jdoe = new User(name:"John Doe", role:"user")   def suziq = new User(name:"Suzi Q", role:"admin")   def jsmith = new User(name:"Jane Smith", role:"user")   mockDomain(User, [jdoe, suziq, jsmith])   def foo = new User(login:"foo")   foo.name = "Bubba"   foo.role = "user"   foo.password = "password"   foo.save()   assertEquals 4, foo.id //NOTE: id gets assigned   assertEquals 3, User.findAllByRol

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