Я обновляю приложение grails с 2.4.3 до 3.0.8. Существует множество интеграционных тестов, которые используют grails.util.GrailsWebUtil.bindMockWebRequest(grailsApplication.mainContext)
, следующих по вызову controller.method
. Но я обнаружил, что grails.util.GrailsWebUtil
больше не содержит метода bindMockWebRequest
, похоже, что он был заменен на grails.util.GrailsWebMockUtil
, но все сервисы, объявленные в контроллере, не вводятся в класс. Я мог бы использовать grails.test.spock.IntegrationSpec
, но этот класс также был удален из grails3. Существует suggestion для использования функциональных тестов для тестирования интеграции контроллеров, но это решение не работает для меня, я не хочу выполнять все эти тесты как функциональные или вручную вводить зависимости в экземпляры контроллера, как я могу его исправить ?тест интеграции контроллеров grails3: услуги не вводятся
ответ
Использование grails.test.mixin.integration.Integration
аннотация вместо grails.test.spock.IntegrationSpec
расширение класса.
И переместите интеграционные тесты на src/integration-test/groovy
.
Я модернизируюсь от Grails 2.5.1 до 3.2.4. Один из моих интеграционных тестов не смог найти службу, которую я ввел с помощью def xxxService. Я включил службу в список @Mock. XxxServiceIntegrationSpec расширяет спецификацию.
Я знаю, что это не совсем относится к тестовым контроллерам, но, возможно, это помогает?
У нас были дозоны интеграции контроллеров в нашем старом приложении grails 2.x. Когда мы перешли на grails 3, мы хотели сохранить его, не могли их бросить и писать функциональные тесты с нуля.
Здесь я писал о его Integration testing controllers with Grails 3
Основные шаги - настройка макета запроса и ответа - установить имя текущего контроллера - остальное фиктивный запрос и ответ в конце теста
See вышеупомянутое сообщение в блоге для полного примера.
Надеюсь, это поможет.
'ConfigurableApplicationContext ctx = (ConfigurableApplicationContext) grailsApplication.getMainContext(); ctx.getBeanFactory(). AutowireBeanProperties (контроллер, AutowireCapableBeanFactory.AUTOWIRE_BY_NAME, false); '- может быть решением – airfox
Вот полный пример того, как писать интеграционные тесты для контроллера с grails 3 http://nimavat.me/blog/grails3-контроллер интеграция тест-пример –