请注意:虽然这个问题提及 RabbitMQ,但它真的是核心的Grails /测试问题。
我对使用Grails RabbitMQ plugin感兴趣,以便我的Grails应用可以发布/发送消息。
出于测试目的,我想要存根/模拟一个消息代理,这样我实际上不必启动一个成熟的RabbitMQ代理来运行一些自动化测试,看看我是否app正确处理消息的发布和消费。
对于订阅方,我对QueueConsumer
对象感兴趣,该对象最终从ConnectionFactory
实例as this example shows获得:
ConnectionFactory>>连接>>频道>> QueueConsumer
好消息是:要配置RabbitMQ插件,您只需在ConnectionFactory
中配置Config.groovy
:
rabbitmq {
connectionfactory {
username = 'guest'
password = 'guest'
hostname = 'localhost'
}
}
不确定我是否可以某种方式利用它,但想指出它。
所以我的想法是使用类似Mockito的东西来模拟QueueConsumer
实例(其nextDelivery()
方法为我提供了一个具有所需测试行为的模拟Delivery
实例)并将该模拟工厂注入我的插件不知怎的。
让我们假装模拟看起来像这样(在测试用例中):
@Test
def onConsumeDoSomething() {
// Given
QueueConsumer mockConsumer = Mockito.mock(QueueConsumer.class)
Delivery mockDelivery = Mockito.mock(Delivery.class)
mockDelivery.when(getBody()).thenReturn("<message>test message</message>")
mockConsumer.when(nextDelivery()).thenReturn(mockDelivery)
// TODO: How to inject 'mockConsumer' into Grails for a test?
// When
// TODO: How to exercise the test?
// Then
}
我的问题是:我怎么能这样做,它的测试结果怎么样? 我对使用模拟的集成测试比上面的单元测试更感兴趣。那么,我可以做{{1}的事情}甚至grails test-app
并且模拟被注入。