Grails / Spock测试为服务提供了存根实现

时间:2015-12-09 12:19:39

标签: grails testing spock

目前我有一个Grails服务,它实际上是向AMQP提供商发布消息。我想通过替换publish方法来存储消息发布,这样它就不会发布到AMQP,而是将消息存储在列表中

示例:

class AService {
    EventPublisherService eventPubliserService
    def createSomething() {
        eventPublisherService.publishEvent(..)
    }
}

有没有办法存根“创造一些方法”'在集成测试中,我可以稍后在列表中查看已发布的事件吗?

1 个答案:

答案 0 :(得分:0)

您可以使用闭包映射模拟eventPublisherService,其中键是要模拟的方法的名称。然后在闭包内,您可以测试传递的消息列表。之后恢复服务,以免影响其他测试。

class AServiceTests extends GroovyTestCase {

    def aService
    def eventPublisherService

    @After
    protected void tearDown() {
        super.tearDown()
        aService.eventPublisherService = eventPublisherService
    }

    void testSomething() {
        aService.eventPublisherService = [publishEvent: { messages ->
            assert messages.size() == 5
            // etc.
        }]

        // continue testing
    }
}