unit-testing - 有没有一种不太臃肿的方法来测试 grails 中的约束?

标签 unit-testing grails constraints

有没有一种不太臃肿的方法来测试约束?在我看来,这样的代码太多,无法测试约束。

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/

相关文章:

grails - 如果子字符串匹配,则在“字符串”字段中插入链接

cocoa - 另一个 cocoa : Crash in _NSDisplayOperationStack; Need Guidance too

iphone - 如何从UIView中删除约束?

Android JUnit 测试因 java.lang.VerifyError 失败

apache-flex - 在 groovy/grails 中使用元编程拦截服务方法调用

swift - 如果未调用闭包,我如何使 XCTest 失败?

grails - 如何解决grails插件依赖关系

ios - Swift4 - 我第一次无法显示 CollectionView "Unable to simultaneously satisfy constraints"

java - Spring 单元测试 : injecting a dependency into a component under test

android - 模拟 BluetoothDevice 时的 PowerMock 和 Android TypeNotPresentExceptionProxy