Вы должны переопределить каждый метод, который был объявлен как чисто виртуальный в классах, от которых вы наследуете, прямо или косвенно. Есть две причины не желать переопределять их все:
- Их слишком много, и у вас есть что-то лучшее, чем ваше время, чтобы обойти их все.
- Компиляция ложного класса со всеми из них происходит слишком медленно и занимает слишком много памяти.
Исправление для (1) заключается в использовании сценария gmock_gen.py
в каталоге scripts
Google Mock. Он просматривает определение класса и преобразует объявления методов в операторы MOCK_METHOD
. Если у вас есть проблемы с (2), вы можете заменить ненужные операторы MOCK_METHOD
заглушками:
MOCK_METHOD1(f, bool(int i));
с
virtual bool f(int i) {
thrown std::exception("The stub for f(int) has been invoked unexpectedly.");
}
Создание исключения предупредит вас о ситуации, когда была вызвана конкретная заглушка, а это означает, что вам, скорее всего, придется ее высмеивать.
Редактировать: Если исходные интерфейсы для макета написаны с использованием макросов Microsoft, в этой теме размещен скрипт, который преобразует их в C ++, приемлемый для gmock_gen.py
.