You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何验证Spock Mock按指定顺序并携带指定参数被调用

验证Spock中方法调用的顺序与参数

在Spock中要验证方法调用的顺序及指定参数,只需将交互断言按预期调用顺序依次编写即可,Spock会严格按顺序匹配调用记录。同时需要先为Foo创建Mock实例并注入到MyClass中(Groovy支持直接访问私有字段完成赋值)。

完整测试代码如下:

def "myMethod should call foo.bar with 'a' then 'b'"() {
    given: "a MyClass instance with a mocked Foo"
    Foo fooMock = Mock()
    MyClass myClass = new MyClass()
    myClass.foo = fooMock // Groovy直接访问私有字段赋值

    when: "myMethod is called with 'a' and 'b'"
    myClass.myMethod('a', 'b')

    then: "foo.bar is first called with 'a', then with 'b'"
    1 * fooMock.bar('a') // 验证第一次调用参数为'a'
    1 * fooMock.bar('b') // 验证第二次调用参数为'b'
}

核心说明:

  • Mock注入:利用Groovy特性直接给私有字段foo赋值Mock对象,无需修改原业务代码;若遵循依赖注入原则,也可为MyClass添加构造方法或Setter来注入Foo实例。
  • 顺序校验:Spock的then块中,交互断言的书写顺序即为预期的调用顺序,只有实际调用顺序与断言顺序完全一致时,测试才会通过。
  • 参数精准匹配:直接指定具体参数'a'和'b',替代通配符_,确保调用参数完全符合预期。

内容的提问来源于stack exchange,提问作者James Wierzba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 10:13:01