私は、どこの句のテーブルに虚偽のオブジェクトを使用しようとしています。基本的にはこのような何か:Spock: "Where"句テーブルの中のMockを使用していますか?
def "my test"(){
given:
InjectedObject1 inj1 = Mock()
InjectedObject2 inj2 = Mock()
SystemUnderTest system = new System(inj1, inj2)
MockedObject mocked = Mock()
inj1.someMethod() >> list // this will be a list of MockedObject
when:
system.execute()
then:
n * inj2.someOtherMethod()
where:
list | n
[mocked] | 0
[mocked, mocked] | 1
}
「どこで」句が「与えられた」節の前に実行され、それが最初に参照されたときにmocked
がまだ存在していないので、これは動作しません。どのように私はこれを克服するのですか? mocked
はこのテストだけですので、このメソッド以外では作成しないでください。
これは単純な例です。実際にはより多くのやりとりがあり、テーブルの他の列はn
に影響します。これはテーブル構文を非常に便利にします。
私はこれについて考えていましたが、私の場合はうまくいくでしょうが、もしこのリストがもっと複雑でなければならないのですか?確かに、あなたのソリューションの一般化として、 "where"テーブルのintを使用し、必要なモックを生成するために "given"節にスイッチを置くことができますが、それはniceテーブル構文の目的を打ち負かします... –
すべてのツールには限界があります。 http://issues.spockframework.orgで機能リクエストを提出してください。 –
[完了](http://code.google.com/p/spock/issues/detail?id=224):) Spock @peterに感謝します。 –