Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Mock multiple calls to the same method in spock

Tags:

groovy

spock

I am currently writing unit testcase for a groovy application

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

Test class

classStorePageSpec 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.

like image 982
Supersic Avatar asked Dec 31 '22 19:12

Supersic


1 Answers

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.

like image 189
cgrim Avatar answered Jan 10 '23 18:01

cgrim