Search code examples
groovyspock

Mock multiple calls to the same method in spock


I am currently writing unit testcase for a groovy application

class Page{
   ..
   ..
   str1 = obj.getDateBasedOnValue("A");
   str2 = obj.getDateBasedOnValue("B");
}

Test class

class PageSpec extends Specification{
   Obj obj = Mock(Obj)
   ...
   def "testCase 1"(){
      obj.getDateBasedOnValue(_) >> "some date string 1"
      obj.getDateBasedOnValue(_) >> "some date string 2"
   }
}

Can someone tell me if this is the right way to mock both the calls in spock? If no then please guide me towards the right solution.


Solution

  • To return different values on successive invocations, use the triple-right-shift (>>>) operator:

    def "testCase 1"(){
        obj.getDateBasedOnValue(_) >>> ["some date string 1", "some date string 2"]
    }
    

    Then getDateBasedOnValue() will return "some date string 1" for the first time and "some date string 2" for the second time.