如何在测试配置中使用相同的 bean 但具有不同的属性?
How to use same beans in Test Configuration but with different attributes?
我有单独的配置 类 为每个 Spring Profile
创建不同的 bean。我希望我的测试尽可能地模拟生产代码,所以我想使用 在 Spring ‘PROD’ Profile
下创建的相同 bean 但 add/update 专门用于测试的不同属性.实现这一目标的最佳方法是什么?
我的意思的例子:
@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() {
...
}
}
理想情况下,我不想复制代码以在 TestConfig
中设置 SimpleRabbitListenerContainerFactory
的各种属性。我只想加载 ProdConfig 但调用 setAdviceChain(interceptor())
.
尝试这样的事情:
@Import(ProdConfig.class)
public class TestConfig {
@Autowired
private SimpleRabbitListenerContainerFactory containerFactory;
@Bean
RetryOperationsInterceptor interceptor() {
...
this.containerFactory.setAdviceChain(interceptor);
return interceptor;
}
}
我有单独的配置 类 为每个 Spring Profile
创建不同的 bean。我希望我的测试尽可能地模拟生产代码,所以我想使用 在 Spring ‘PROD’ Profile
下创建的相同 bean 但 add/update 专门用于测试的不同属性.实现这一目标的最佳方法是什么?
我的意思的例子:
@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() {
...
}
}
理想情况下,我不想复制代码以在 TestConfig
中设置 SimpleRabbitListenerContainerFactory
的各种属性。我只想加载 ProdConfig 但调用 setAdviceChain(interceptor())
.
尝试这样的事情:
@Import(ProdConfig.class)
public class TestConfig {
@Autowired
private SimpleRabbitListenerContainerFactory containerFactory;
@Bean
RetryOperationsInterceptor interceptor() {
...
this.containerFactory.setAdviceChain(interceptor);
return interceptor;
}
}