33

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

(下面的“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”中。

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

非常感谢指针。

4

1 回答 1

48

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

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

于 2013-05-02T07:29:37.107 回答