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


 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域对象一起工作。

下面的测试通过Grails 2.3.8。

A超类…

// 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
    }
}

最新更新