Grails/Spock测试为服务提供了存根实现
目前,我有一个Grails服务,它实际上向AMQP提供者发布消息。我想通过替换publish方法来存根消息发布,这样它就不会发布到AMQP,而是将消息存储在列表中 例如:Grails/Spock测试为服务提供了存根实现,grails,testing,spock,Grails,Testing,Spock,目前,我有一个Grails服务,它实际上向AMQP提供者发布消息。我想通过替换publish方法来存根消息发布,这样它就不会发布到AMQP,而是将消息存储在列表中 例如: class AService { EventPublisherService eventPubliserService def createSomething() { eventPublisherService.publishEvent(..) } } 有没有办法在集成测试中存根“cr
class AService {
EventPublisherService eventPubliserService
def createSomething() {
eventPublisherService.publishEvent(..)
}
}
有没有办法在集成测试中存根“createSomethingMethod”,以便我以后可以在列表中检查已发布的事件?您可以使用闭包映射模拟
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
}
}
为什么只替换publishEvent()方法而不是整个EventPublisherService对象?