Я работаю над проектом, используя Grails 2.5.4, и в настоящее время пытаюсь запустить некоторые интеграционные тесты, которые не выполняются. Я отладил проблему и обнаружил, что, по-видимому, некоторые динамические методы в тестируемых службах отсутствуют при запуске в интеграционном тесте (если вы запустите это в контексте приложения, методы есть, и все работает). Это происходит во многих тестах, которые я пытаюсь запустить, я выбрал один в качестве примера, но другие, которые терпят неудачу, имеют те же проблемы.
У меня есть этот класс домена
class Event {
...
static hasMany = [
bundles : Bundle
]
...
}
и тестируемый метод обслуживания:
@Transactional
class BundleService {
...
void assignEvent(Event event, List bundleIds) {
..
for (id in bundleIds) {
event.addToBundles(Bundle.get(id))
}
}
...
}
Итак, я запускаю этот спок-тест
class BundleServiceIntegrationSpec extends Specification {
BundleService bundleService
EventService eventService
private BundleTestHelper bundleHelper = new BundleTestHelper()
...
void '04. Test deleteBundleAndAssets method'() {
when: 'a new Bundle is created'
Bundle bundle = bundleHelper.createBundle(project, 'Test Bundle')
and: 'a new Event is created'
Event event = eventService.create(project, 'Test Event')
and: 'the above Bundle is assigned to the Event'
bundleService.assignEvent(event, [bundle.id])
...
}
он терпит неудачу в строке moveEvent.addToBundles(Bundle.get(id)) BundleService со следующим исключением
groovy.lang.MissingMethodException: No signature of method:
net.domain.Event.addToBundles() is applicable for argument
types: (net.domain.Bundle) values: [Test Bundle]
Possible solutions: getBundles()
at net.service.BundleService.$tt__assignEvent(BundleService.groovy:101)
Проблема в том, что метод addToBundles(), который Grails должен динамически добавлять в класс Event из-за коллекции hasMany "bundles", не добавляется. Как я уже упоминал, если вы запустите приложение и воспользуетесь этой службой, метод будет готов, и все будет работать.
Я попытался изменить базовый класс теста (с Specification на IntegrationSpec), так как я считаю, что именно здесь динамический возможности, а также управление транзакциями и другие вещи для интеграционных тестов управляются, но это не сработало.
Есть ли причина, по которой этот метод, который должен быть в сервисе, отсутствует в контексте интеграционных тестов? Спасибо