[英]Grails unit test for a domain class with constraint on relationship
我有一個域名課程
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
的約束lock nullable: false
,測試運行正常。
是Grails的錯誤還是我做錯了?
PS試圖在mockForConstraintsTests(Door)
之前添加mockDomain(DoorLock)
mockForConstraintsTests(Door)
=>沒有任何變化
PPS我有Grails 2.3.7和休眠插件“:hibernate:3.6.10.9”
我發現了該錯誤的可重現方案:僅在測試域類時出現錯誤,該域類具有名稱為“ lock”的屬性(任何類型的屬性),並且對該屬性具有約束。 看起來像Grails錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.