Как использовать автоматически сконфигурированные bean-компоненты в (модульных) тестах при ручной настройке bean-компонентов в main? - PullRequest
0 голосов
/ 29 августа 2018

Меня интересует, как по-другому связать вещи в тестовой среде. У меня есть особый сценарий, в котором я хотел бы иметь очереди Oracle AQ в main и очереди ActiveMQ в test .

Я использую Spring Boot и выяснил, как заставить работать Oracle AQ. Я использую конфигурацию Java.

OracleAQ

В основной конфигурации я определяю следующие bean-компоненты (только соответствующие imo):

  • JmsListenerContainerFactory (DefaultJmsListenerContainerFactory) (необходим JmsListener)
  • ConnectionFactory (AQjmsQueueConnectionFactory) (необходим для JmsTemplate и ContainerFactory)
  • Источник данных (OracleDataSource) (необходим ConnectionFactory)

Используется:

org.springframework:spring-jms
javax.jms:jms
javax.transaction:jta
com.oracle:aqapi
com.oracle:ojdbc8
org.springframework.data:spring-data-oracle

ActiveMQ

Кроме того, в настоящее время в другом проекте у меня есть настройка ActiveMQ по умолчанию. Там я определяю только один боб (возможно, я могу даже обойтись без него):

  • JmsListenerContainerFactory (DefaultJmsListenerContainerFactory).

Автоматически подключен:

  • ConnectionFactory (ActiveMQConnectionFactory)
    • и у этого фабрики соединений нет источника данных (activemq в памяти vm)

Я использую:

org.springframework:spring-jms
javax.jms:jms
org.springframework.boot:spring-boot-starter-activemq
org.apache.activemq:activemq-broker

Oracle AQ и ActiveMQ вместе взятые

Теперь я хотел бы объединить оба подхода: тестирование OracleAQ в основном и ActiveMQ.

  • Я начал с добавления зависимостей Oracle. Нет проблем.
  • Затем я определяю компонент DataSource (OracleDataSource). Нет проблем.
  • Затем я определяю ConnectionFactory (необходим для jmstemplate и containerfactory). Проблема: main теперь имеет правильную ConnectionFactory, но у test также есть эта ConnectionFactory. Я хочу получить ActiveMQConnectionFactory, но получить AQjmsQueueConnectionFactory в test . Ранее это было автоматически настроено и подключено для меня.

Так что я думаю, что мой вопрос действительно: Как использовать автоматически настроенные bean-компоненты в test , в то время как main имеет настроенные вручную bean-объекты одного и того же интерфейса?

В этом случае трудно (инкапсулированный код) вручную собрать автоматически сконфигурированный bean-компонент в среде test , поэтому я думаю о направлении игнорирования main бобы или около того. Другая идея заключается в создании автоконфигурации самостоятельно.

Есть еще идеи? чаевые? примеры?

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

Я также думаю, что этот случай может быть очень специфичным для организации очередей, и может быть обобщен, например, на с использованием типа базы данных * (postgres, например) в main и H2 в тесте .

Спасибо

EDIT

https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-auto-configuration.html объясняет, как заменить автоконфигурирование на ваши собственные bean-компоненты. Что мне нужно, так это наоборот.

...