Макет Google, ожидающий вызова между 2 заданными номерами

#googletest #googlemock

#googletest #googlemock

Вопрос:

Я использую макет Google в качестве основы для тестирования системы реального времени, я хочу убедиться, что конфигурация датчиков выполняется правильно. Для этого я отправляю новую частоту на указанный датчик и ожидаю, что обратный вызов данных моего датчика будет вызываться x раз.

Из-за этого мне приходится отключать поток тестирования на несколько секунд, поэтому мой обратный вызов можно вызвать несколько раз.

Из-за этого ожидаемые вызовы не являются заданным числом, например, если я ожидаю, что мой обратный вызов будет вызываться один раз в секунду, и я сплю в потоке 5 секунд, на самом деле его можно вызвать от 4 до 6 раз, иначе тест будет слишком строгим.

В этом проблема, я не нашел способа проверить, находится ли ожидаемый вызов между 4 и 6, я попробовал следующее:

 EXPECT_CALL(*handler,Data_Mock(_,_)).Times(::testing::AnyNumber());
EXPECT_CALL(*handler,Data_Mock(_,_)).Times(::testing::AtMost(6));
EXPECT_CALL(*handler,Data_Mock(_,_)).Times(::testing::AtLeast(4));
  

И

 EXPECT_CALL(*handler,Data_Mock(_,_)).Times(::testing::AnyNumber());
EXPECT_CALL(*handler,Data_Mock(_,_)).Times(::testing::AtLeast(4));
EXPECT_CALL(*handler,Data_Mock(_,_)).Times(::testing::AtMost(6));
  

Ответ №1:

Попробуйте Between из https://github.com/google/googletest/blob/master/googlemock/docs/cheat_sheet.md#cardinalities-cardinalitylist. Это как раз для того, чтобы утверждать, что данный вызов вызывается между m и n раз.

Комментарии:

1. Черт, я искал так много ключевых слов в этих документах, и по какой-то причине я не думал о поиске этого, спасибо, это сработало отлично: D