【问题标题】:Using Spock data driven tests in Grails 3 unit test在 Grails 3 单元测试中使用 Spock 数据驱动测试
【发布时间】:2017-01-06 02:28:51
【问题描述】:

我正在将在 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:26 处的 groovy.lang.MissingPropertyException

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

已编辑:我删除了我最初在 setup() 中的 mockForConstraints() 调用无效。

【问题讨论】:

  • 关注docs.grails.org/latest/guide/testing.html 并注意“测试约束”。底线 mockForConstraintsTest 在 Grails 3 中不再可用。
  • 我已阅读该部分并将其从另一个测试用例中删除。不幸的是,我选择了一个不同的测试用例来粘贴到它仍然存在的问题中。无论如何,删除 mockForConstraintsTests 什么都不做。它仍然失败,在新的 ContactPhoneNumber 行上出现 MissingPropertyException:val 未定义。我错过了使用数据驱动测试所需的其他内容。

标签: unit-testing grails spock


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-11
    • 2016-10-09
    • 2014-06-21
    • 2016-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多