精通 Grails: 使用 Grails 进行单元测试(单元测试提速)
2009-11-26 00:00:00 来源:WEB开发网再次调整 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"]
}
更多精彩
赞助商链接