如何使模拟方法返回带有连续调用的连续值

问题描述 投票:0回答:2

这是一个非常基本的问题,我确定我必须将其删除为重复对象,但是我没有找到答案。

在测试中:我以为我会尝试这样的事情。我想做的是让它在第一个电话中返回“ 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。

mocking spock
2个回答
1
投票

0
投票

返回值的序列

要在连续调用中返回不同的值,请使用三重右移(>>>)运算符:

subscriber.receive(_)>>> [“确定”,“错误”,“错误”,“确定”]

第一次调用将返回“ ok”,第二次调用将返回“ error”第三次调用,其余所有调用为“ ok”。的右侧必须是Groovy知道如何迭代的值;在此示例中,我们使用了简单列表。

© www.soinside.com 2019 - 2024. All rights reserved.