有没有一种不太臃肿的方法来测试约束?在我看来,这样的代码太多,无法测试约束。
class BlogPostTests extends GrailsUnitTestCase {
protected void setUp() {
super.setUp()
mockDomain BlogPost
}
void testConstraints() {
BlogPost blogPost = new BlogPost(title: "", text: "")
assertFalse blogPost.validate()
assertEquals 2, blogPost.errors.getErrorCount()
assertEquals "blank", blogPost.errors.getFieldError("title").getCode()
assertEquals "blank", blogPost.errors.getFieldError("text").getCode()
blogPost = new BlogPost(title: "title", text: ObjectMother.bigText(2001))
assertFalse blogPost.validate()
assertEquals 1, blogPost.errors.getErrorCount()
assertEquals "maxSize.exceeded", blogPost.errors.getFieldError("text").getCode()
}
}
最佳答案
我建议不要测试 getErrorCount()
,因为您会使测试变得脆弱(当您添加其他约束时,您必须记住更新 new 的每个实例BlogPost()
测试用例中的任何位置)。只需检查 hasErrors()
。
除此之外...对于每个约束,您需要生成一些违反它的测试数据,调用验证例程并对错误进行断言。这是您需要的代码。
重构一些方法来删除重复项。示例:
private void assertConstraintWorks(clazz, fieldName, testData, expectedErrorCode) {
def instance = clazz.newInstance((fieldName): testData)
assertFalse instance.validate()
assertTrue instance.hasErrors()
assertEquals expectedErrorCode, instance.errors?.getFieldError(fieldName)?.code
}
void testConstraints() {
assertConstraintWorks BlogPost, 'title', '', 'blank'
assertConstraintWorks BlogPost, 'text', '', 'blank'
assertConstraintWorks BlogPost, 'text', ObjectMother.bigText(2001), 'maxSize.exceeded'
}
关于unit-testing - 有没有一种不太臃肿的方法来测试 grails 中的约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2899483/