有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在测试配置中使用相同的bean,但使用不同的属性?

我有单独的配置类,每个Spring Profile创建不同的bean。我希望我的测试尽可能地模拟生产代码,因此我希望使用在Spring ‘PROD’ Profile下创建的相同bean,但添加/更新专门用于测试的不同属性。实现这一目标的最佳方式是什么

举例说明我的意思:

@Profile(PROD)
public class ProdConfig {
    @Bean
    public SimpleRabbitListenerContainerFactory containerFactory() {
        SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
        factory.setConnectionFactory(connectionFactory);
        factory.setMaxConcurrentConsumers(2);
        ...
        return factory;
    }
}

@Profile(TEST)
public class TestConfig {
    @Bean
    public SimpleRabbitListenerContainerFactory containerFactory() {
        SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
        factory.setConnectionFactory(connectionFactory);
        factory.setMaxConcurrentConsumers(2);
        ...
        /**
            The advice chain should only set for testing purposes
        **/
        factory.setAdviceChain(interceptor());
        return factory;
    }

    @Bean
    RetryOperationsInterceptor interceptor() {
        ...
    }
}

理想情况下,我不想重复代码来设置TestConfigSimpleRabbitListenerContainerFactory的各种属性。我只想加载ProdConfig,但调用setAdviceChain(interceptor())


共 (1) 个答案

  1. # 1 楼答案

    试试这样:

    @Import(ProdConfig.class)
    public class TestConfig {
    
        @Autowired
        private SimpleRabbitListenerContainerFactory containerFactory;
    
        @Bean
        RetryOperationsInterceptor interceptor() {
            ...
    
            this.containerFactory.setAdviceChain(interceptor);
    
            return interceptor;
        }
    
    }