在实际应用程序中使用模拟对象(未经测试)

时间:2019-03-26 22:41:00

标签: java spring-boot mockito

这是我的第一个问题! 我试图在我的Spring-boot应用程序中使用IBM MQ API(allclient),但是,我并不是在所有环境中都可用MQ。 我已经配置了spring创建一个MQQueueManager bean,当我运行一个实际的队列管理器时,它可以正常工作,但是如果不运行,则无法启动我的应用程序。 当我/其他人没有队列管理器时,我想从我的应用程序中删除MQQueueManager依赖项。

要解决这个问题,将这个bean注入另一个bean,所以删除MQQueueManager config类仍然会破坏我的另一个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,因此应用程序无法启动。

1 个答案:

答案 0 :(得分:0)

Spring-boot有条件注入。有很多注释可用于有条件地注入bean。我认为这是您尝试执行的操作。您可以在以下位置看到一些解释:https://iamninad.com/conditional-bean-creation-in-spring-boot/和此处:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-developing-auto-configuration.html

您不应尝试在应用程序的测试范围之外使用Mockito。 Mockito(和JUnit)是用于测试而非生产代码的框架。