Подтвердить что ты не робот

Run grails 2.1.3 тесты в Intellij Idea: Необычная ошибка в тесте Spock: невозможно добавить класс домена [класс x.y.Z]. Это не домен

Я занимаюсь обновлением до 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

Когда я удаляю статические блоки отображения в обоих классах домена, тест проходит!

4b9b3361

Ответ 1

Похоже, проблема заключалась в том, что IDEA не правильно очищалась от одного тестового прогона к другому. Тест проходит после восстановления проекта.

Ответ 2

У меня тоже была похожая проблема. Все, что мне нужно, это обновить проект Gradle.

  1. Перейдите к Gradle Tan в IntelliJ.
  2. Вы можете щелкнуть значок обновления или щелкнуть правой кнопкой мыши проект и выбрать "Обновить проект Gradle".

Перезапустите тест в IntelliJ, и ошибка должна исчезнуть.