Интеграционный тест Grails: классы предметной области не работают

Я создал простой проект плагина Grails в STS. Я использую плагин Spring Security Core, который добавил несколько классов домена. Я создал интеграционный тест, который просто создает экземпляр одного из классов предметной области (Пользователь) и сохраняет его. Я получаю следующую ошибку при запуске интеграционного теста:

Failure:  testSomething(com.resonance.rwp.core.tests.UserServiceTests)
groovy.lang.MissingMethodException: No signature of method: com.resonance.rwp.core.domain.User.save() is applicable for argument types: () values: []
Possible solutions: save(), save(boolean), save(java.util.Map), wait(), any(), wait(long)
    at com.resonance.rwp.core.tests.UserServiceTests.setUp(UserServiceTests.groovy:14)

Я не понимаю, кажется, что классы домена по какой-то причине не отображаются через GORM. Все, с чем я сталкивался, связано с тем, что люди пытаются использовать GORM в модульных тестах, но я определенно запускаю интеграционный тест. Любая помощь очень ценится.

Вот исходник, все очень просто:

class UserServiceTests {

@Before
void setUp() {
    User user = new User(username: "Test");
    user.save();
}

@After
void tearDown() {
    // Tear down logic here
}

@Test
void testSomething() {
    fail "Implement me"
}
}

Я также попытался перенести все в сам тест. Очевидно, что метод setUp не работает.


person SoWeLie    schedule 22.01.2012    source источник
comment
Покажите код тестового класса.   -  person Burt Beckwith    schedule 22.01.2012
comment
Похоже, преобразования Gorm AST по какой-то причине не выполняются. Можно ли помимо тестового класса указать версии STS, Grails и Groovy-Eclipse? Это может оказаться ошибкой в ​​STS, и если это так, лучше всего поднять проблему в системе отслеживания проблем: issuetracker.springsource.com/browse/STS   -  person Andrew Eisenberg    schedule 22.01.2012
comment
Добавил исходник, спасибо за помощь!   -  person SoWeLie    schedule 23.01.2012
comment
Тест запускается через командную строку? Работает здесь в 1.3.7.   -  person doelleri    schedule 23.01.2012
comment
Да, я запускаю его в STS, выполнив test-app в командной строке Grails. Вероятно, мне следует попробовать запустить тестовое приложение grails вне STS и посмотреть, что произойдет.   -  person SoWeLie    schedule 23.01.2012
comment
Какую версию СТС вы используете?   -  person Andrew Eisenberg    schedule 23.01.2012


Ответы (4)


У меня тоже была эта проблема с недавно созданным плагином, и я обнаружил, что проблема в том, что недавно созданные плагины не зависят от спящего режима. Я добавил в BuildConfig.groovy следующее:

plugins {
    runtime ":hibernate:$grailsVersion"
}

Это привело к тому, что проблема исчезла. Я недостаточно знаком с Grails, чтобы иметь какие-либо теории относительно того, почему сообщение об ошибке намекает на фактическое существование методов персистентности, таких как save, но, по крайней мере, у меня это работает :)

http://jira.grails.org/browse/GRAILS-9163?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel

person August Lilleaas    schedule 16.06.2013

Только что возникла проблема, подобная вашей, при создании интеграционных тестов с Grails 2.0.0.

Интеграционные тесты завершились неудачно при запуске под grails test-app, но работали при запуске под grails test-app --integration. К моему удивлению, модульные тесты каким-то образом загрязняли тестовую среду. Еще более удивительно, что удаление некоторых автоматически сгенерированных (то есть пустых) модульных тестов помогло! Теперь тесты проходят с обеими командами.

Эта тема обсуждалась в другом вопросе. перевести его модульные тесты на способ написания тестов Grails 2.0.0 (т. е. JUnit 4 и тестовые примеси Grails), чтобы его интеграционные тесты работали, вы можете увидеть, как это сделать, в документы.

Я попытаюсь подать отчет об ошибке, если смогу воспроизвести в минимальном приложении, созданном для этой цели. Надеюсь это поможет!

person Esteban    schedule 13.02.2012

Похоже, что преобразования Grails AST по какой-то причине не выполняются. Я предполагаю, что вы используете Grails 2.0, но на самом деле вы этого не сказали. Попробуйте запустить чистую сборку внутри STS (Project -> Clean...).

Я попробовал это в простом проекте Grails 2.0. Похоже, это работает для меня. Я думаю, что вам лучше всего создать простой проект Grails, в котором есть эта проблема, экспортировать его как почтовый индекс и поднять проблему jira. https://issuetracker.springsource.com/browse/STS

person Andrew Eisenberg    schedule 28.01.2012
comment
Это Грааль 2.0. Также забыл упомянуть, что это проект плагина. Не уверен, что это имеет значение. Это совершенно новый проект, и я попробовал чистый. - person SoWeLie; 28.01.2012
comment
поднять ошибку и прикрепить проект. - person Andrew Eisenberg; 28.01.2012

Если у вас есть один тест, который все еще использует:

extends GrailsUnitTestCase 

ты увидишь это. Вам нужно изменить все модульные тесты на тесты на основе аннотаций в Grails 2+.

http://grails.org/doc/latest/guide/testing.html#unitTesting

person Interlated    schedule 05.01.2013