如何验证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
相关产品推荐
相关产品推荐

