WEB开发网
开发学院软件开发Java 精通 Grails: 使用 Grails 进行单元测试(单元测试... 阅读

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

 2009-11-26 00:00:00 来源:WEB开发网   
核心提示: mockDomain() 方法尽可能忠实地建模 GORM 行为,例如,精通 Grails: 使用 Grails 进行单元测试(单元测试提速)(9),当您将一个域类保存到模拟表在中时,会像在实际应用程序中一样填充 id 字段,比如条件块、 Hibernate Query Language (HQL

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.findAllByRole("user").size() 
} 

模拟底层数据库并不是您唯一可以在 GrailsUnitTestCase 中完成的工作。您也可以模拟日志基础架构。

理解 mockLogging()

GrailsUnitTestCase
的用途并不仅仅是测试域类。键入 grails create-service Admin 创建一个 Admin 服务,如清单 14 所示:

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

模拟和元编程的局限性

mockDomain() 方法只是简单地利用底层 Groovy 语言的本机动态功能。(要了解 Groovy 中的元编程的更多信息,请查阅 “实战 Groovy:使用闭包、ExpandoMetaClass 和类别进行元编程。”)实际上,它会拦截通常存在于域类上的方法调用,并将它们替换为模拟行为,以进行测试。毫无疑问,这意味着不会模拟其他支持技术,比如条件块、 Hibernate Query Language (HQL) 和 Query By Example (QBE)。如果您的代码依赖于这些技术中的任何一种,您需要编写集成测试并运行一个实际的数据库。

上一页  4 5 6 7 8 9 10  下一页

Tags:精通 Grails 使用

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接