目前,我有一个Grails服务,该服务实际上将消息发布到AMQP提供程序。我想通过替换publish方法对消息发布进行存根,这样它就不会发布到AMQP,而是将消息存储在列表中
例:
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
}
}