使用GTest测试延迟动作

时间:2018-09-12 16:13:22

标签: unit-testing c++11 testing automated-tests googletest

我的场景模板如下:

    // 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实现此测试用例?

0 个答案:

没有答案