Я работаю над проектом с использованием 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 ", связывает"не добавлено.Как я уже говорил, если вы запускаете приложение и используете этот сервис, метод есть, и все работает.
Я попытался изменить базовый класс теста (со Спецификации на IntegrationSpec), так как я верю, что именно здесь динамическийВозможности, а также управление транзакциями и другие вещи для интеграционных тестов управляются, но это не сработало.
Есть ли причина, по которой этот метод, который должен присутствовать в сервисе, отсутствует в контексте интеграционных тестов?Спасибо