在Grails 3单元测试中使用Spock数据驱动的测试

时间:2016-08-29 23:35:58

标签: unit-testing grails spock

我正在升级一系列在Grails 2中使用Grails 3的单元测试,并且在使用Spock数据驱动测试格式进行测试的域测试时遇到问题。

import grails.test.mixin.TestFor
import grails.test.mixin.TestMixin
import grails.test.mixin.support.GrailsUnitTestMixin
import spock.lang.Unroll

import com.spiekerpoint.ark.test.ConstraintsTestSupport

 /**
  * Unit test for domain class ContactPhoneNumber.
  */
 @TestFor(ContactPhoneNumber)
 class ContactPhoneNumberSpec implements ConstraintsTestSupport {

    def setup() {
    }

    def cleanup() {
    }

    @Unroll
    void "test ContactPhoneNumber type constraints"() {
        when:
        ContactPhoneNumber obj = new ContactPhoneNumber("$field": val)

        then:
        validateConstraints(obj, field, error)

        where:
        error       | field         | val
       'valid'      | 'type'        | 'HOME'
       'valid'      | 'type'        | 'MOBILE'
       'valid'      | 'type'        | 'WORK'
       'valid'      | 'type'        | 'PAGER'
       'valid'      | 'type'        | 'FAX'
    }
}

我得到了     ContactPhoneNumberSpec.groovy的groovy.lang.MissingPropertyException:26

当我执行测试时,因为测试执行没有填写测试中的错误,字段和val引用。如上所述,这个测试适用于Grails 2.5.5,所以我怀疑我在Grails 3中缺少了我需要的东西。

编辑:我删除了我最初在setup()中的mockForConstraints()调用,但没有效果。

1 个答案:

答案 0 :(得分:0)

事实证明,使用的ConstraintsTestSupport特性是作为旧Grails 2.x项目中的一个类实现的,该类扩展了spock.lang.Specification。当它被转换为特征时,它不再扩展支持数据驱动测试所需的基础Spock类。

这个错误是在一个完全独立的模块中引入的,如果你把代码视为Spock测试就很明显了。