grails - 在运行测试用例时,为属性指定了不存在的映射属性[none]

标签 grails gorm spock

以下是域:

package com.test
class Person{
    String name
    static mappedBy= [friends:'none']
    static hasMany=[friends:Person]
}

它在正常情况下效果很好,但是当我尝试通过在spock中使用@Mock注释进行模拟来进行测试以进行保存时,出现以下异常:
|  org.grails.datastore.mapping.model.IllegalMappingException:

     Non-existent mapping property [none] specified for property [friends] in class [com.test.Person]
        at org.grails.datastore.mapping.model.config.GormMappingConfigurationStrategy.establishRelationshipForCollection(GormMappingConfigurationStrategy.java:364)
        at org.grails.datastore.mapping.model.config.GormMappingConfigurationStrategy.getPersistentProperties(GormMappingConfigurationStrategy.java:206)
        at org.grails.datastore.mapping.model.AbstractPersistentEntity.initialize(AbstractPersistentEntity.java:87)
        at org.grails.datastore.mapping.model.config.GormMappingConfigurationStrategy.getOrCreateAssociatedEntity(GormMappingConfigurationStrategy.java:675)
        at org.grails.datastore.mapping.model.config.GormMappingConfigurationStrategy.establishDomainClassRelationship(GormMappingConfigurationStrategy.java:632)
        at org.grails.datastore.mapping.model.config.GormMappingConfigurationStrategy.getPersistentProperties(GormMappingConfigurationStrategy.java:214)
        at org.grails.datastore.mapping.model.AbstractPersistentEntity.initialize(AbstractPersistentEntity.java:87)
        at org.grails.datastore.mapping.model.AbstractMappingContext.initializePersistentEntity(AbstractMappingContext.java:250)
        at org.grails.datastore.mapping.model.AbstractMappingContext.initialize(AbstractMappingContext.java:239)
        at grails.test.mixin.domain.DomainClassUnitTestMixin.initializeMappingContext(DomainClassUnitTestMixin.groovy:150)
        at grails.test.mixin.domain.DomainClassUnitTestMixin.mockDomains(DomainClassUnitTestMixin.groovy:144)
        at org.spockframework.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:138)
        at org.spockframework.runtime.extension.builtin.JUnitFixtureMethodsExtension$FixtureType$FixtureMethodInterceptor.intercept(JUnitFixtureMethodsExtension.java:145)
        at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:84)
        at org.spockframework.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:138)
        at org.spockframework.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:138)
        at org.spockframework.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:138)

下面是测试用例:
import grails.test.mixin.Mock
import grails.test.mixin.TestFor
import spock.lang.Specification

@TestFor(PersonController)
@Mock([Person])
class PersonControllerSpec extends Specification{

    def "test save person"(){
        given:"some person request parameters set for person"
        params.putAll([name:'test234', friends:[], action:'save', controller:'person'])

        when:"perosn.save is called"
        controller.save()

        then:"it must create person object"
        Person.count() == 1
      }

}

知道在这种情况下可以做什么吗?

最佳答案

在grails 2.5.1之后,此问题已修复:https://github.com/grails/grails-core/issues/669

通过升级到Grails 2.5.5,并将使用过的hibernate4插件更新为hibernate4:5.0.0.RELEASE版本,我解决了该项目中的问题。

关于grails - 在运行测试用例时,为属性指定了不存在的映射属性[none],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32308123/

相关文章:

grails - 交易不会通过AutoFlush在IntregrationSpecs上回滚

testing - Spock MissingMethodException

unit-testing - 有什么办法可以使用GORM在模拟域对象中设置ID

grails - 单击<g:actionSubmit>按钮时, Controller 中的params值始终为null

grails - 条件中存在子句

javascript - 防止更改 HTML 只读文本字段

grails - Grails中的自定义域约束

javascript - SlickGrid 标题菜单 - 单列多项选择

mongodb - Grails Mongodb插件无法保存

grails - 从Grails 2.5.4升级到3.1.8,GORM错误