Запуск модульного теста контроллера работает в IntelliJ, но без использования приложения grails test

Я сталкиваюсь с небольшой проблемой, с которой я не знаю, как ее решить. В моем текущем приложении мы используем RabbitMQ в качестве брокера AMQP (с использованиемspring-rabbit) и успешно написали интеграционные тесты, в которых RabbitMQ ConnectionFactory автоматически подключается и т. Д.

Теперь у нас также есть несколько модульных тестов для небольшого контроллера, которые выдают ошибку при запуске из командной строки.grails test-app

org.springframework.beans.factory.BeanCreationException: Ошибка при создании bean-компонента с именем rabbitMQConfig: ошибка внедрения зависимостей с автопроводкой; вложенным исключением является org.springframework.beans.factory.BeanCreationException: не удалось автоматически связать поле: private org.springframework.amqp.rabbit.connection.ConnectionFactory rabbitmq.config.RabbitMQConfig.connectionFactory; вложенное исключение - org.springframework.beans.factory.NoSuchBeanDefinitionException: для зависимости не найдено подходящего bean-компонента типа [org.springframework.amqp.rabbit.connection.ConnectionFactory]: ожидается, что по крайней мере 1 bean-компонент, который квалифицируется как кандидат для автоматической передачи этой зависимости. Аннотации зависимостей: {@org.springframework.beans.factory.annotation.Autowired(обязательно =true)}

Когда я запускаю Unit Test внутри IntelliJ, все работает отлично!

Поэтому мне интересно, в чем разница между выполнением тестов внутри IntelliJ и командной строкой Grails. Я предполагаю, что это имеет какое-то отношение к средам, в которых Grails запускает тест. Но мы также подключили RabbitMQTestConfig, чтобы интеграционные тесты работали с тестовой конфигурацией.

Я немного озадачен тем, почему это работает внутри IntelliJ, а не в командной строке. Любая подсказка?

2 ответа

Когда вы говорите "запустить модульный тест внутри IntelliJ", вы имеете в виду запускать тестовую задачу Gradle (поскольку вы используете Grails 3)?

Вы можете попытаться определить вашу ложную инъекцию с помощью doWithSpring в вашей спецификации:

// define the mock or the object instance you want
ConnectionFactory connectionFactory = Mock(ConnectionFactory) 
def doWithSpring = {
  connectionFactory(InstanceFactoryBean, connectionFactory, ConnectionFactory)
}

Если это не решение, вы можете попробовать очистить перед повторным тестированием

Другие вопросы по тегам