How do you stub a function to return a different value each time it's called in a single test
I've got a function with the following code:
if (ext_test() == true) {
ext_mod();
if (ext_test() == true) {
ext_in();
}
ext_out();
}
and I need to make a test that executes out_func() BUT NOT in_func() (the ext_test(), ext_mod(), ext_in() and ext_out() functions access data outside the function; I didn't design this BTW, I'm just testing it). We need to stub the ext_test() function to be true the first time, but false the second time it's called. However, as far as I can tell, stubbing a function will apply to every call of said function. I was able to come up with the following code in a function that is linked to the stub:
static int count = 0; *__return = count++ % 2 == 0;
This code will return true the first time it is called, but false the second time. However, I'm hesitant to add state to a unit test, as this may cause problems later down the line.
So my question is: is there a way to accomplish this that is built into Parasoft? I feel like this kind of issue is not so rare to have no better answer.
Best Answer
-
I've found an answer, It's buried in the Parasoft manual (not online, for some reason). We can change my code from this:
static int count = 0; *__return = count++ % 2 == 0;
to this:
// `stubCallInfo->callNo` starts at 1 *__return = stubCallInfo->callNo % 2 == 1;
It seems that
stubCallInfo->callNois the variable I was searching for.0