首页 > 解决方案 > 如何在(单元)测试中使用自动配置的bean,同时在main中手动配置bean?

问题描述

我对如何在测试环境中以不同方式连接事物感兴趣。我有一个特殊的场景,我想在main和 ActiveMQ 队列中有 Oracle AQ 队列test

我正在使用 Spring Boot,我想出了如何让 Oracle AQ 工作。我正在使用 Java 配置。

甲骨文AQ

在主配置中,我定义了以下 bean(仅相关的 imo):

是使用:

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

活动MQ

另外,目前在另一个项目中,我有一个默认的 ActiveMQ 设置。在那里我只定义了一个 bean(也许我什至可以没有它):

自动连线是:

我用:

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

Oracle AQ 和 ActiveMQ 结合

现在我想结合这两种方法:在 main 中使用 OracleAQ,在测试中使用 ActiveMQ。

所以我想我的问题真的是:如何在测试中使用自动配置的bean,而main已经手动配置了相同接口的bean?

在这种情况下,很难(封装代码)在测试环境中手动重新组装自动配置的 bean,所以我正在考虑忽略bean 左右的方向。另一个想法是自己创建一个自动配置。

还有其他想法吗?提示?例子?

我认为依赖注入的想法应该相当容易,但我不确定如何。

我还认为这种情况可能非常具体到排队,例如,在 main 中使用数据库类型 *(例如 postgres)和在 test 中使用 H2

谢谢

编辑

https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-auto-configuration.html解释了如何用你自己的 bean 替换自动配置。我需要的是相反的方式。

标签: javaspringunit-testingspring-bootdependency-injection

解决方案


推荐阅读