#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.