Grails中Spock测试报错:classification表关联未映射类com.myCompany.Classifier
解决Grails测试中“关联指向未映射类”的问题
问题描述
给服务的领域对象添加新关联后,运行Spock测试时抛出异常:
An association from the table classification refers to an unmapped class: com.myCompany.Classifier
根本原因
使用DataTest接口的Grails单元测试为了保持轻量,不会自动扫描并加载所有领域类的映射元数据。只有显式声明的领域类才会被GORM处理,未声明的类会被判定为“未映射”,导致关联关系无法识别。
解决方案
在测试类中实现DataTest接口的getDomainClasses()方法,列出测试过程中所有涉及的领域类,包括Classifier、Classification以及它们关联的Photo、PhotoRequirement:
package com.myCompany import grails.test.hibernate.HibernateSpec import grails.testing.gorm.DataTest import grails.testing.services.ServiceUnitTest class StatusQueueServiceSpec extends HibernateSpec implements ServiceUnitTest<StatusQueueService>, DataTest { @Override Class[] getDomainClasses() { return [Classifier, Classification, Photo, PhotoRequirement] as Class[] } def setup() { ... } void "test handleStatusChange"() { ... } }
补充排查点
- 确认
Classifier类的包路径、类名拼写正确,测试类能正常引用 - 检查
Classifier是否被Grails正确识别为领域类(需确保类在Grails默认扫描的领域类目录下,或通过配置指定扫描路径) - 若使用多数据源,确认
Classifier的数据源配置与Classification兼容(Classifier未指定数据源时默认使用ConnectionSource.DEFAULT,与Classification配置一致)
内容的提问来源于stack exchange,提问作者SGT Grumpy Pants
相关产品推荐
相关产品推荐

