仅在 spock 中模拟基于调用次数的方法返回

Posted

技术标签:

【中文标题】仅在 spock 中模拟基于调用次数的方法返回【英文标题】:mock out return of a method base on the number of invocation only in spock 【发布时间】:2014-12-31 11:14:35 【问题描述】:

是否可以根据第 n 次调用 spock 中的方法的返回值来模拟它?请注意,我不想指定传入的参数,因为它对于特定的测试用例无关紧要。

例如,第一次调用应该返回 x,第二次调用应该返回 y。

【问题讨论】:

很奇怪的要求。开箱即用是不可能的,您需要/想要实现什么?场景是什么? @Opal 我有一个服务方法,我会对其进行迭代,直到该方法返回特定值,现在我只需要验证迭代过程/循环是否按预期工作。 【参考方案1】:

是的,这是可能的。

someObject.someMethod(*_) >>> [ 'x', 'y' ]

它将在第一次调用时返回x,在第二次调用该方法时返回y

例子:

void "test something"() 
    given:
    def sample = Mock(Sample)
        someMethod(_) >>> [ 'Hello', 'World' ]
    

    expect:
    sample.someMethod( 'foo' ) == 'Hello'
    sample.someMethod( 'bar' ) == 'World'


class Sample 
    def someMethod(def a) 
        return a
    

【讨论】:

正是我想要的。谢谢 谢谢!!这也是我的测试所需要的

以上是关于仅在 spock 中模拟基于调用次数的方法返回的主要内容,如果未能解决你的问题,请参考以下文章

Spock 模拟验证返回 0 次调用

如何在 Spock 控制器测试中模拟 Grails 请求对象方法

有啥方法可以在 Spock 中进行模拟参数捕获

如何在 Grails 单元测试中使用 Spock 模拟 passwordEncoder

如何使用 Spring Boot 应用程序和 Spock 测试在运行时更改服务器端口

使用spock在被测试函数内部使用的模拟对象