如何将mock注入Grails插件?

时间:2014-08-17 09:49:57

标签: grails testing groovy mocking

请注意:虽然这个问题提及 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并且模拟被注入。

0 个答案:

没有答案