Ответ 1
Похоже, проблема заключалась в том, что IDEA не правильно очищалась от одного тестового прогона к другому. Тест проходит после восстановления проекта.
Я занимаюсь обновлением до grails 2.1.x и мне нужно повторить некоторые из моих тестов старого стиля.
Я только что добавил новый тест для своего spock Spec, и для этого теста мне нужно высмеять дополнительный класс домена.
До этого у меня было:
@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 (это фактически делает мой тестовый проход)?
Я уверен, что не должен быть обязательным для моего unit test.
Любые советы?
UPDATE: На самом деле, я только что обнаружил, что эта проблема возникает только при запуске модульных тестов внутри моей IDE: intellij Idea 12.1
Проблемы, созданные с помощью тестового приложения:
http://jira.grails.org/browse/GRAILS-9989
http://youtrack.jetbrains.com/issue/IDEA-105087
Когда я удаляю статические блоки отображения в обоих классах домена, тест проходит!
Похоже, проблема заключалась в том, что IDEA не правильно очищалась от одного тестового прогона к другому. Тест проходит после восстановления проекта.
У меня тоже была похожая проблема. Все, что мне нужно, это обновить проект Gradle.
Перезапустите тест в IntelliJ, и ошибка должна исчезнуть.