【问题标题】:Grails unit test for a domain class with constraint on relationship具有关系约束的域类的 Grails 单元测试
【发布时间】:2014-04-27 16:32:19
【问题描述】:

我有一个域类

class Door {
    String id
    String url
    Room room

    static hasOne = [lock: DoorLock]

    static mapping = {
        id generator: 'uuid'
    }

    static constraints = {
        url nullable:  false
        room nullable: true 
        lock nullable: true
    }

我正在尝试为它编写一个简单的 Spock 测试(实际上首先没有任何逻辑,只是为了检查 Grails 的模拟功能)。

@TestFor(Door)
class DoorSpec extends Specification {
    protected void setup() {
       mockForConstraintsTests(Door)
    }

    def cleanup() {
    }

    void "test something"() {
       when:
       def door = new Door()

       then:
       true
     }
}

当我运行测试(grails test-app Door)时,它失败并出现错误:

java.lang.IllegalStateException: Method on class [citypoints.Door] was used outside of a Grails application. If running in the context of a test using the mocking API or bootstrap Grails correctly.
    at citypoints.Door._clinit__closure2(Door.groovy:17)
    at org.grails.datastore.mapping.config.groovy.MappingConfigurationBuilder.evaluate(MappingConfigurationBuilder.groovy:80)
    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:133)
    at grails.test.mixin.domain.DomainClassUnitTestMixin.mockDomain(DomainClassUnitTestMixin.groovy:166)
    at grails.test.mixin.domain.DomainClassUnitTestMixin.mockDomain(DomainClassUnitTestMixin.groovy:165)
    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)
| Completed 1 unit test, 1 failed in 0m 3s

但是,当我从 Door 类中删除约束 lock nullable: false 时,测试运行良好。

是 Grails 错误还是我做错了什么?

附:尝试在mockForConstraintsTests(Door) 之前添加mockDomain(DoorLock) => 没有任何变化

附言我有 Grails 2.3.7 和休眠插件 ":hibernate:3.6.10.9"

【问题讨论】:

    标签: hibernate unit-testing grails mocking entity-relationship


    【解决方案1】:

    我发现此错误的可重现场景: 仅在测试域类时才会出现错误,该类具有名称为“lock”的属性(任何类型)以及对该属性的约束。 看起来像 Grails 错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-22
      • 1970-01-01
      • 1970-01-01
      • 2011-09-14
      相关资源
      最近更新 更多