Spockのモックとセットで非常に独特な動作に遭遇しました。
Spock(0.5、Groovy 1.7)given:
ブロック(amount
は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)
}
最初のバージョンが機能しない理由を誰かが知っていますか?