【发布时间】:2019-03-26 22:41:00
【问题描述】:
这是我的第一个问题! 我试图在我的 spring-boot 应用程序中使用 IBM MQ API(allclient),但是,我没有在所有环境中都提供 MQ。 我已经配置 spring 来创建一个 MQQueueManager bean,当我有一个实际的队列管理器运行时它工作正常,但是当我没有运行时,我无法启动我的应用程序。 当我/其他人没有队列管理器时,我想从我的应用程序中删除 MQQueueManager 依赖项。
为了增加这个 bean 被注入另一个 bean 的问题,所以删除 MQQueueManager 配置类仍然会破坏我的另一个 bean。
我已经尝试了下面的代码,虽然我会加载 Mock bean 而不是真正的 bean。
src/main/java/com/app/config
@Configuration
@Profile("development")
public class MqConfig {
@Bean
public MQQueueManager connectToQueue(){
//connection to real QMGR
}
}
src/test/java/com/app/config
@Configuration
@Profile("test")
public class MqConfig {
@Bean
public MQQueueManager connectToQueue(){
return Mockito.mock(MQQueueManager.class);
}
}
Spring 找不到任何 MQQueueManager bean,因此应用无法启动。
【问题讨论】:
-
您好,第一篇文章带有清晰的代码示例。在我看来,Mockito 应该只用于测试。我建议你看看你的设计,也许用你自己的接口包装 MQQueueManager,这让你可以选择在开发配置文件中返回一个真正的 IBM 对象,在测试环境中返回一个虚拟实现。最后一个问题 - 现在是 2019 年,您是否必须使用 IBM MQ,您可以使用 rabbitmq 或其他更简单的替代方案吗?
-
嗨。是的我同意。在我的实际应用程序中使用模拟对象非常反直觉。当我回家时,我会尝试将它包装在一个界面中。我在一个非常缓慢的部门工作,MQ 仍然是标准。我们正在慢慢开始使用微服务 :)
标签: java spring-boot mockito