我的场景模板如下:
// this function is called as timer callback
void funcToBeCalled ();
Timer t;
void
push_data ()
{
if (t.isRunning ())
{
return;
}
t.start (oneshot = true);
}
//TestCase
EXPECT_CALL(mockObj,funcToBeCalled).Times(1);
push_data ();
push_data ();
push_data ();
目的是当在时间段t中调用 push_data() n次时,它将绑定到计时器回调,因此只有一次funcToBeCalled()
被调用,在t时间之后所有的push_data请求都将被忽略。
上面的案例是一个原型版本,测试已经成功完成。您可以假设模拟设置正确。
但是我想要一个像这样的测试用例:
#define TIMER_TIMEOUT 10
bool funcToBeCalled ();
Timer t;
void
push_data ()
{
if (t.isRunning ())
{
return;
}
t.start (TIMER_TIMEOUT, oneshot = true);
}
// TestCase
SharedSignal msgnal;
EXPECT_CALL (mockObj,
funcToBeCalled).Times (2).
WillOnce (Return (true)).WillOnce (SetSignal (msgnal));
push_data ();
push_data ();
push_data ();
Sleep (TIMER_TIMEOUT);
push_data ();
push_data ();
push_data ();
msgnal.wait (5 * TIMER_TIMEOUT);
睡眠可确保第一时间窗口到期,应再次调用funcToBeCalled()
。
我不想使用验证Mock::VerifyAndClearExpectations
,它不会模拟一个长时间窗口,而是从头开始模拟两个时间窗口。
如何使用Google Test Framework实现此测试用例?