如何通过Grails中继承的类中的映射构造函数设置属性?

时间:2014-05-27 14:33:19

标签: grails groovy

 class A {
     String a
 }

 class B extends A {
     String b
 }

现在我想在创建B

的实例时通过地图构造设置这两个属性
 def instance = new B(a: "foo", b: "bar")
 assert instance.b != null 

只有它不起作用。

实际上它确实在纯Groovy中工作,但它在Spock测试中不适用于Grails域对象。

1 个答案:

答案 0 :(得分:1)

以下测试通过了Grails 2.3.8。

超级班......

// grails-app/domain/inheritedproperties/SuperClass.groovy
package inheritedproperties

class SuperClass {
    String a
}

子类......

// grails-app/domain/inheritedproperties/SubClass.groovy
package inheritedproperties

class SubClass extends SuperClass {
    String b
}

Spock规范......

// test/unit/inheritedproperties/SubClassSpec.groovy
package inheritedproperties

import grails.test.mixin.TestFor
import spock.lang.Specification

@TestFor(SubClass)
@Mock(SuperClass)
class SubClassSpec extends Specification {

    void "test binding inherited properties"() {
        when:
        def instance = new SubClass(a: 'A', b: 'B')

        then:
        'A' == instance.a
        'B' == instance.b
    }
}