grails - Grails 2.5.2中名为 “identity”的成员的约束在模拟测试时生成异常

标签 grails grails-domain-class

在我的Grails 2.5.2应用程序中,我有一个域类,其成员名为“identity”。成员具有如下约束:

static constraints = {
    identity maxSize: 15, nullable: false, unique: true
}

我的单元测试像这样模拟域类:
@TestFor(CustomerController)
@Mock(Customer)
class CustomerControllerSpec extends Specification {
...

...但是运行测试时出现此异常:
groovy.lang.MissingMethodException: No signature of method: org.grails.datastore.mapping.keyvalue.mapping.config.Family.identity() is applicable for argument types: (java.util.LinkedHashMap) values: [[maxSize:15, nullable:false, unique:true]]
Possible solutions: identity(groovy.lang.Closure)

    at org.grails.datastore.mapping.config.groovy.MappingConfigurationBuilder.invokeMethod(MappingConfigurationBuilder.groovy:55)
    at com.twentyonegrams.mailportal.shipment.Customer._clinit__closure1(Customer.groovy:10)
    at com.twentyonegrams.mailportal.shipment.Customer._clinit__closure1(Customer.groovy)
    at org.grails.datastore.mapping.config.groovy.MappingConfigurationBuilder.evaluate(MappingConfigurationBuilder.groovy:83)
    at org.grails.datastore.mapping.config.AbstractGormMappingFactory.createMappedForm(AbstractGormMappingFactory.java:63)
    at org.grails.datastore.mapping.keyvalue.mapping.config.GormKeyValueMappingFactory.createMappedForm(GormKeyValueMappingFactory.java:39)
    at org.grails.datastore.mapping.keyvalue.mapping.config.GormKeyValueMappingFactory.createMappedForm(GormKeyValueMappingFactory.java:28)
    at org.grails.datastore.mapping.keyvalue.mapping.config.KeyValuePersistentEntity.<init>(KeyValuePersistentEntity.java:35)
    at org.grails.datastore.mapping.keyvalue.mapping.config.KeyValueMappingContext.createPersistentEntity(KeyValueMappingContext.java:95)
    at org.grails.datastore.mapping.model.AbstractMappingContext.addPersistentEntities(AbstractMappingContext.java:174)
    at grails.test.mixin.domain.DomainClassUnitTestMixin.mockDomains(DomainClassUnitTestMixin.groovy:86)
    at org.spockframework.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:153)
    at org.spockframework.runtime.model.MethodInfo.invoke(MethodInfo.java:84)
    at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:88)
    at org.spockframework.runtime.extension.builtin.AbstractRuleInterceptor$1.evaluate(AbstractRuleInterceptor.java:37)
    at grails.test.runtime.TestRuntimeJunitAdapter$1$2.evaluate(TestRuntimeJunitAdapter.groovy:49)
    at org.spockframework.runtime.extension.builtin.TestRuleInterceptor.intercept(TestRuleInterceptor.java:38)
    at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:87)
    at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:88)
    at org.spockframework.runtime.extension.builtin.AbstractRuleInterceptor$1.evaluate(AbstractRuleInterceptor.java:37)
    at grails.test.runtime.TestRuntimeJunitAdapter$3$4.evaluate(TestRuntimeJunitAdapter.groovy:76)
    at org.spockframework.runtime.extension.builtin.ClassRuleInterceptor.intercept(ClassRuleInterceptor.java:38)
    at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:87)
    at org.junit.runners.Suite.runChild(Suite.java:128)
    at org.junit.runners.Suite.runChild(Suite.java:27)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:234)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:74)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)

是否有其他方法可以输入约束或模拟域,从而可以避免出现此异常?

该问题在Grails 2.5.3中仍然存在。

我也为此提交了bug report

最佳答案

为了测试像unique这样的约束,它确保数据库表不包含重复值,请使用mockForConstraintsTests(Customer),[identity]);

关于grails - Grails 2.5.2中名为 “identity”的成员的约束在模拟测试时生成异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34390720/

相关文章:

grails - Ra-在 Grails 应用程序中对更改后的用户进行身份验证

spring - chalice 3;使用 Spring Security 查看自己的数据

grails - 如何使用域类字符串名称访问用户定义的Grails项目包名称

Grails - 如何在每次保存之前执行代码?

grails - Grails仅返回实体的ID

grails - "grails test-app * "从不进入断点

arrays - 将元素保存在Map/Array/Collection中……Grails

grails - 生成 Controller 并查看错误时:无法将int字段lms.Book.bookId设置为java.lang.Class

grails - grails-在gsp上显示验证错误消息

grails - 如何在grails中自定义spring security插件登录页面