我们在 Spock 中遇到了一个非常奇特的模拟和集合行为。
在 Spock (0.5, Groovy 1.7)given:
块中 ( amount
is an Integer
):
Set<Operand> operands=new HashSet<Operand>()
for (index in amount){
operand = Mock(Operand)
operand.update() >> null
operands.add(operand)
}
每次循环运行后(右括号上的断点),集合中只有一 (1) 个元素,当循环重新开始时,operands.size() == 0
. 显然,模拟对象神秘地消失了。
在以下版本中,一切正常,并且operands.size() == amount
在循环运行后集合。
Set<Operand> operands=new HashSet<Operand>()
amount.times{
operand = Mock(Operand)
operand.update() >> null
operands.add(operand)
}
有谁知道为什么第一个版本不起作用?