如何使模拟方法 return 具有连续调用的连续值

How to make a mocked method return a succession of values with a succession of invocations

这是一个非常基本的问题,我确定我必须删除它作为一个骗子...但我还没有找到答案。

在测试中:我想我会尝试这样的事情。我想要做的是在第一个电话 return '333' 和第二个电话 '555' 。

gb.reader = Mock( XMLStreamReader ){
    getAttributeValue( _, _ ) >> [ '333', '555' ]
}

在应用代码中:

int id = reader.getAttributeValue( null, 'ID').toInteger()

结果:

java.lang.NumberFormatException: For input string: "[333, 555]"

首先想到的是:我们需要一台发电机。但这是 Groovy,而不是 Python。

只需使用 >>>,请参阅 Spock 手册第 "returning sequences of values" 章。