14

我正在升级到 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

当我删除两个域类中的静态映射块时,测试通过了!

4

2 回答 2

21

问题似乎是由于 IDEA 没有正确清理从一次测试运行到另一次运行。重建项目后测试通过。

于 2013-04-11T07:32:25.720 回答
0

我也有类似的问题。我只需要刷新 gradle 项目。

  1. 导航到 IntelliJ 中的 Gradle tan。
  2. 您可以单击刷新图标或右键单击项目并选择“刷新 Gradle 项目”。

在 IntelliJ 中重新运行测试,错误应该会消失。

于 2019-08-16T21:39:44.307 回答