我正在升级到grails 2.1.x,需要重做一些旧式测试。
我刚刚为我的spock Spec添加了一个新测试,对于这个测试,我需要模拟一个额外的Domain类。
在此之前,我曾:
@Mock([Event, EventType])
现在我有:
@Mock([Event, EventType, Notification])
Notification.groovy与Event和EventType(在grails-app / domain下)位于同一个包和物理目录中,因此它绝对是一个grails域类。
当我尝试运行测试时,我得到以下堆栈跟踪:
org.codehaus.groovy.grails.exceptions.GrailsConfigurationException: Cannot add Domain class [class x.y.Notification]. It is not a Domain!
at org.codehaus.groovy.grails.commons.DefaultGrailsApplication.addArtefact(DefaultGrailsApplication.java:911)
at org.codehaus.groovy.grails.commons.DefaultGrailsApplication.addArtefact(DefaultGrailsApplication.java:615)
at grails.test.mixin.domain.DomainClassUnitTestMixin.mockDomain(DomainClassUnitTestMixin.groovy:131)
at grails.test.mixin.domain.DomainClassUnitTestMixin.mockDomain(DomainClassUnitTestMixin.groovy:128)
当我通过兔子洞并开始调试执行时,我到达DomainClassArtefactHandler的这一部分(第87行):
// make sure the identify and version field exist
testClass.getDeclaredField(GrailsDomainClassProperty.IDENTITY);
testClass.getDeclaredField(GrailsDomainClassProperty.VERSION);
这会引发异常,因为我猜id字段不存在
因此出现了问题,在执行此操作之前不会添加GORM字段。
有没有人建议我需要做什么?我是否需要将我的域类标记为@Entity(这实际上是我的测试通过)?
我很确定我的单元测试不应该是强制性的。
有什么建议吗?
更新 实际上,我刚刚发现只有当我在IDE中运行单元测试时才会出现这个问题:intellij Idea 12.1
使用测试应用创建了问题:
http://jira.grails.org/browse/GRAILS-9989
http://youtrack.jetbrains.com/issue/IDEA-105087
当我删除两个域类中的静态映射块时,测试通过了!
答案 0 :(得分:21)
似乎这个问题是由于IDEA没有在一次试运行中正确清理。重建项目后,测试就会通过。
答案 1 :(得分:0)
我也有类似的问题。我所需要做的只是刷新gradle项目。
在IntelliJ中重新运行测试,错误应该消失。