Sleep () call inside gmock EXPECT_CALL

I'm trying to sleep a bit inside .WillOnce before calling FuncHelper. So I need something similar to the following:

EXPECT_CALL(*_mock, Func(_,_,_)).Times(1)
  .WillOnce(DoAll(InvokeWithoutArgs(sleep(TimeToSleep)), 
                  Invoke(_mock, &M_MyMock::FuncHelper)));

Is it possible to call sleep () with arg inside .DoAll? C ++ 98 is preferred.

UPD:

The solution is based on @Smeeheey's answer and uses C ++ 98.

template <int N> void Sleep ()
{
  sleep(N);
}
...
EXPECT_CALL(*_mock, Func(_,_,_)).Times(1)
  .WillOnce(DoAll(InvokeWithoutArgs(Sleep<TimeToSleep>), 
                  Invoke(_mock, &M_MyMock::FuncHelper)));
+4
source share
2 answers

Since you said that C ++ 98 is preferable to mandatory, first I will give a nice neat answer to C ++ 11:

EXPECT_CALL(*_mock, Func(_,_,_)).Times(1)
  .WillOnce(DoAll(InvokeWithoutArgs([TimeToSleep](){sleep(TimeToSleep);}), 
                  Invoke(_mock, &M_MyMock::FuncHelper)));

Otherwise (for C ++ 98), define a wrapper function elsewhere in the code:

void sleepForTime()
{
    sleep(TimeToSleep);
}

And then:

EXPECT_CALL(*_mock, Func(_,_,_)).Times(1)
  .WillOnce(DoAll(InvokeWithoutArgs(sleepForTime), 
                  Invoke(_mock, &M_MyMock::FuncHelper)));

Note that there TimeToSleepmust be a global variable.

:. OP , TimeToSleep , :

template <int Duration>
void sleepForTime()
{
    sleep(Duration);
}

...

EXPECT_CALL(*_mock, Func(_,_,_)).Times(1)
  .WillOnce(DoAll(InvokeWithoutArgs(sleepForTime<TimeToSleep>), 
                  Invoke(_mock, &M_MyMock::FuncHelper)));
+3

++ 98, std::bind1st:

EXPECT_CALL(*_mock, Func(_,_,_)).Times(1)
  .WillOnce(DoAll(InvokeWithoutArgs(std::bind1st(sleep, TimeToSleep)), 
                  Invoke(_mock, &M_MyMock::FuncHelper)));
+1

All Articles