froi
froi

Reputation: 7768

mock out return of a method base on the number of invocation only in spock

Is it possible to mock out the return value of a method in spock based on the nth time it was called? Note that I don't want to specify the parameters passed in because it does not matter for a specific test case.

For example, for the first call it should return x, for the second call it should return y.

Upvotes: 12

Views: 4865

Answers (1)

dmahapatro
dmahapatro

Reputation: 50245

Yes it is possible.

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

It will return x on first invocation and y on second invocation of the method.

Example:

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
    }
}

Upvotes: 18

Related Questions