私は周りを見回して、無駄にさまざまなことを試みました。インターウェブ上にある例は少なく、私見は非常に単純です。私のユースケース:
(以下の「itocNetworkHandler」はモックです)
when: "we're doing stuff"
StandardResponse response = cms.doCardStuff("123", "111", order)
....
then: "we get proper calls and response object"
1 * cms.itocNetworkHandler.doNetworkCall(
{ it instanceof ReplacementRequestRecord
}, StandardResponseRecord.class) >> record
パラメータ(「it」)をモックの「doNetworkCall」に保存したいと思います。
パラメータが必要な理由は、テストしているオブジェクトがパラメータを取り込んで処理を行い、新しいオブジェクトを作成して、そのオブジェクトをモックに渡すことになっているためです。作成したオブジェクトが想定どおりに見えることを確認したいと思います。
ポインタは大歓迎です。
次のように引数をキャプチャできます。
_// must be declared before when-block (or inside Specification.interaction {})
def captured
when:
...
then:
1 * mock.doNetworkCall(...) >> { record, recordClass ->
// save the argument
captured = record
...
}
// use the saved argument
captured == ...
_
とは言うものの、引数制約で期待されるレコードをチェックするなど、より簡単な解決策があることがよくあります(例:...doNetworkCall( { it == ... } )
)。