精通 Grails: 使用 Grails 进行单元测试(单元测试提速)
2009-11-26 00:00:00 来源:WEB开发网在内存中模拟数据库表可以节省大量时间,尤其是在启动实际数据库需要很长时间时。更糟的是,一旦数据库开始运行,您仍然需要确保使用使您的断言得以通过所必需的记录来填充数据库表。
我并不是暗示运行对生产数据库运行实际的集成测试时浪费时间。我的意思是,这些耗时的集成测试更适合于持续集成服务器。在这种情况下,模拟数据库交互可以使您专注于 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
}
更多精彩
赞助商链接