春季:运行测试时注入其他bean

时间:2018-10-09 21:14:40

标签: spring spring-mvc spring-boot

我想测试我的应用程序,以便在真实存储库中注入其他bean。

我有一个这样的存储库:

@Component
public class MyRepo {
   @Autowired
   private MongoTemplate template;

   public void methodA(){
    template.find({});
   }
}

作为Spring引导运行应用程序时,会从配置文件中读取MongoTemplate。

这是我的配置

@Configuration
public class MyConfig {
    @Bean
    public MongoTemplate mongoTemplate(){
       MongoTemplate mongo = new MongoTemplate();
       mongo.setxyz;
       return mongo;
    }   
}

我想要实现的是,在运行单元测试文件时,我想将下面的bean注入到实际的MyRepo中。换句话说,我希望Spring使用TestConfig.MongoTemplate bean而不是MyConfig.MongoTemplate。

@Configuration
public class TestConfig {
    @Bean
    public MongoTemplate mongoTemplate(){
       MongoTemplate embeded = new MongoTemplate();
       embeded.setxyz;
       return embeded; 
    }   
}

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

@Profile("!test")
@Configuration
public class MyConfig {
@Bean
public MongoTemplate mongoTemplate(){
   MongoTemplate mongo = new MongoTemplate();
   mongo.setxyz;
   return mongo;
 }   
}

用于测试配置:

@Profile(value = {"test"})
@Configuration
public class TestConfig {
@Bean
public MongoTemplate mongoTemplate(){
   MongoTemplate embeded = new MongoTemplate();
   embeded .setxyz;
   return embeded; 
 }   
}

要测试时,在application.properties文件中添加以下内容。

spring.profiles.active=test

另一个解决方案可以使用模仿框架here