当前位置: 首页 > 知识库问答 >
问题:

在Intellij IDEA中运行grails 2.1.3测试:Spock测试中的奇怪错误:无法添加域类[class X.Y.Z]。它不是域

林烨华
2023-03-14

我正在升级到grails 2.1.x,需要重做一些旧式测试。

我刚刚在我的spock规范中添加了一个新测试,对于这个测试,我需要模拟一个额外的域类。

在此之前,我有:

@Mock([Event, EventType])

现在我有:

@Mock([Event, EventType, 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)

当我通过rabbit hole并开始调试执行时,我会看到DomainClassArtefactHandler的这一部分(第87行):

            // make sure the identify and version field exist
            testClass.getDeclaredField(GrailsDomainClassProperty.IDENTITY);
            testClass.getDeclaredField(GrailsDomainClassProperty.VERSION);

这会出现一个异常,因为我猜id字段不存在

所以出了问题,在执行之前没有添加GORM字段。

有人对我需要做什么有什么建议吗?我是否需要将我的域类标记为@实体(这实际上使我的测试通过)?

更新:实际上,我刚刚发现只有在IDE:intellij IDEA12.1中运行单元测试时才会出现这个问题

创建的问题,测试应用html" target="_blank">程序如下:

http://jira.grails.org/browse/grails-9989

http://youtrack.jetbrains.com/issue/idea-105087

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

暂时还没有答案

 类似资料:
  • 我在Eclipse IDE中使用JUnit4。我有一个包含7个测试的测试文件,通过选择运行为JUnit运行良好。我为另一组测试添加了另一个文件。我有一个测试文件。我相信我正确地创建了测试...这个文件/测试 当我选择文件并选择运行为JUnit时,什么都不会发生。我错过了什么? 更新抱歉,信息不完整。。。 项目树如下所示:src/java/...源文件src/test/com/javaserver/

  • 我得堆栈: 想法2019.1.3 Springboot 2.1.6 Java 11 Maven 3.8.0 Groovy 2.5 史巴克1.3 JUnit jupiter 5.5.1 JUnit vintage 5.5.1 GMavenPlus插件2.7.1 我们想开始在Spock测试框架中编写测试。我跟着这个howto,但没有成功。当我尝试运行所有测试时,我的spock测试没有运行。 我能运行一

  • 看起来让它静态化可能会起作用,但我想要的方法会触及类的@shared变量,所以我不确定静态是最好的选择。

  • 我正在使用Spock框架进行测试(1.0-groovy-2.4版本)。Junit提供了使用命令行(使用Maven)运行特定测试的选项: 问题:我怎样才能和斯波克做到这一点? 这个版本依赖于Junit 4.12,Junit文档中指出,只有Junit 4才支持此功能。x、 基本上,斯波克应该提出类似的建议。

  • 我正在尝试用Maven/Intellij运行spock测试。但是maven和intellij都没有接受测试类。它肯定会拾取类,但不会在类中执行任何测试。 2)Surefire插件配置正确,因为它会拾取文件进行测试 3)target/test-classs文件夹中生成的测试类 我需要帮助我在这里错过了什么。

  • 在运行spock测试时,我需要帮助模拟一个类及其从yaml文件获得的数据。我有一个用groovy编写的microservice,它根据yaml文件中的字段名参数进行字段映射。 我有一个projectProperties类,它从yaml文件中提取数据。 这个类将从 /src/main/resourcesapplication.yaml文件中提取变量值 当我运行spock测试时,它无法从project