有没有办法在Spock中进行模拟参数捕获

时间:2013-05-02 05:54:06

标签: mocking spock

我环顾四周,尝试了不同的事情但无济于事。互联网上的例子很少,恕我直言很简单。我的用例:

(下面的'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')存储到mock上的“doNetworkCall”中。

我想要参数的原因是因为我正在测试的对象应该接受我的参数,做东西,创建一个新对象并将那个传递给我的模拟。我想确保创建的对象看起来像它应该的样式。

指针非常感谢。

1 个答案:

答案 0 :(得分:42)

您可以按如下方式捕获参数:

// 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 == ... } ))。