Как сообщить gmock игнорировать любые другие вызовы методов

#googletest #gmock

#googletest #googlemock

Вопрос:

взгляните на приведенный ниже код

 class ExampleInterface {
public:
   virtual void exMethod(int param)=0;
};

class MyMock : public ExampleInterface {
   MOCK_METHOD1(exMethod, void(int));
};

TEST_F(TestCls, test1){
  MyMock mock;

  EXPECT_CALL(mock, exMethod(4)).Times(1);

  mock.exMethod(4);
  mock.exMethod(5);
}
 

этот тест завершается ошибкой с сообщением

 ...Expected: to be called once 
Actual: called once - saturated and active
 

Я хочу, чтобы этот тест прошел, потому что меня не интересуют другие вызовы exMethod, если они не соответствуют ecpect_call . как сообщить gmock игнорировать любые вызовы, которые не соответствуют ожиданиям?

Ответ №1:

Вы могли бы указать, что он также ожидает вызова с любым параметром любое количество раз:

 EXPECT_CALL(mock, exMethod(_)).Times(AnyNumber());
EXPECT_CALL(mock, exMethod(4)).Times(1);
 

Обратите внимание, что порядок ожиданий важен, поскольку самые последние ожидания имеют приоритет. Если вы поместите их наоборот, сопоставитель «_» будет соответствовать всему, а сопоставитель «4» никогда не будет удовлетворен.

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

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

2. Я думаю, что это просто преднамеренное поведение дизайна для Google Mock.