Тестирование отложенных действий с GTest - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть шаблон сценария, как:

    // 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 ();

Цель - когда push_data () вызывается n раз за период времени t, он будет привязан к обратному вызову таймера, поэтому только один раз funcToBeCalled() будет вызывать весь запрос push_data после того, как время t будет проигнорировано. Вышеприведенный случай является прототипом и тестирование прошло успешно. Вы можете предположить, что макет корректен.

Но я хочу, чтобы у меня был такой тест:

#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);

Sleep гарантирует, что время первого окна истекло, следует сделать второй вызов funcToBeCalled().

Я не хочу использовать проверку Mock::VerifyAndClearExpectations он не имитирует одно длительное окно, вместо этого он имитирует два временных окна с нуля.

Как мне выполнить этот контрольный пример с помощью Google Test Framework?

...