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

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

 2009-11-26 00:00:00 来源:WEB开发网   
核心提示: 再次调整 testBlank() 测试,确保验证因合适的原因而失败(从而使单元测试通过),精通 Grails: 使用 Grails 进行单元测试(单元测试提速)(7),如清单 9 所示: 清单 9. 测试现在因正确的原因得以通过voidtestBlank(){mockForConstraints

再次调整 testBlank() 测试,确保验证因合适的原因而失败(从而使单元测试通过),如清单 9 所示:


清单 9. 测试现在因正确的原因得以通过
void testBlank() { 
 mockForConstraintsTests(User) 
 def user = new User(name:"", 
           login:"admin", 
           password:"wordpass") 
 assertFalse user.validate() 
 assertEquals 1, user.errors.errorCount 
 assertEquals "blank", user.errors["name"] 
} 

在重新运行测试以确保其通过时,可以解决一个稍微棘手一些的约束:unique。

使用 mockForConstraintsTests() 测试 unique 约束

在上一节已经看到,可以在隔离环境中轻松执行对他多数约束的测试。例如,测试 password 字段的 minSize 至少为 5 非常简单,因为它只依赖于字段本身的值。清单 10 给出了 testPassword() 方法:


清单 10. 测试 minSize 约束
void testPassword() { 
 mockForConstraintsTests(User) 
 def user = new User(password:"foo") 
 assertFalse user.validate() 
 assertEquals "minSize", user.errors["password"] 
} 

但是如何测试 unique 这样的约束呢?这种约束确保数据库表不包含重复值。幸运的是,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"] 
} 

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

Tags:精通 Grails 使用

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