有没有办法使用CachingConnectionFactory来编写单元测试来获取rabbitmq集群地址

时间:2016-07-19 17:43:52

标签: unit-testing rabbitmq spring-amqp

我已实施集群& HA有两个rabbitMQ节点。

我正在尝试使用Spring-AMQP连接我的群集,如下所示:

CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
connectionFactory.setAddresses("rabbit1:5672,rabbit2:5672");

它也可以。

现在我开始编写单元测试用例,但我无法在测试文件中获取这些地址。 Spring中没有getter方法可以获取这些地址(我使用的是Spring 4.2.1)。 我也尝试执行connectionFactory.getHost(),但它也无法正常工作。

有没有办法使用ConnectionFactory获取这些地址(我可以在单元测试文件中捕获并放大它们)?

1 个答案:

答案 0 :(得分:0)

不确定将addresses提取为变量甚至外部属性并使用它两次的问题:在CachingConnectionFactory bean定义和测试用例中。

我的意思是这样的(例如application.properties):

rabitmq.addresses=rabbit1:5672,rabbit2:5672

@Configuration

@Bean
CachingConnectionFactory connectionFactory(@Value("rabitmq.addresses") addresses) {
   CachingConnectionFactory connectionFactory = new CachingConnectionFactory(); 
   connectionFactory.setAddresses(addresses);
   return connectionFactory;
}

在测试用例中:

@Value("rabitmq.addresses") 
private String addresses;

<强>更新

在Spring AMQP测试中我们喜欢这样:

@Test
public void setAddressesTwoHosts() throws Exception {
    ConnectionFactory mock = mock(com.rabbitmq.client.ConnectionFactory.class);
    CachingConnectionFactory ccf = new CachingConnectionFactory(mock);
    ccf.setAddresses("mq1,mq2");
    ccf.createConnection();
    verify(mock).newConnection(isNull(ExecutorService.class),
            aryEq(new Address[] { new Address("mq1"), new Address("mq2") }));
    verifyNoMoreInteractions(mock);
}