我正在尝试在FunCHelper之前在.WillOnce内进行一些 sleep 。所以我需要类似于以下内容:
EXPECT_CALL(*_mock, Func(_,_,_)).Times(1)
.WillOnce(DoAll(InvokeWithoutArgs(sleep(TimeToSleep)),
Invoke(_mock, &M_MyMock::FuncHelper)));
是否可以在.DoAll内部使用arg调用sleep()? C++ 98是可取的。
UPD:
该解决方案基于@Smeeheey答案,并使用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)));
最佳答案
既然您说C++ 98更可取,而不是强制性的,那么首先我将给出一个简洁的C++ 11答案:
EXPECT_CALL(*_mock, Func(_,_,_)).Times(1)
.WillOnce(DoAll(InvokeWithoutArgs([TimeToSleep](){sleep(TimeToSleep);}),
Invoke(_mock, &M_MyMock::FuncHelper)));
否则(对于C++ 98),在代码中的其他位置定义包装函数:
void sleepForTime()
{
sleep(TimeToSleep);
}
然后:
EXPECT_CALL(*_mock, Func(_,_,_)).Times(1)
.WillOnce(DoAll(InvokeWithoutArgs(sleepForTime),
Invoke(_mock, &M_MyMock::FuncHelper)));
请注意,此处
TimeToSleep
必须是全局变量。编辑:根据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)));
关于c++ - 在gmock的EXPECT_CALL中进行sleep()调用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37678844/