Google Mock: объект абстрактного класса типа "xyz" не допускается?
Использование Visual Studio 2010 C++ с GMock. Попытка создать объект-заглушку для стороннего класса, который используется моими классами, но я получаю следующую ошибку:
Ошибка: объект абстрактного класса типа "ThirdPartyClassFake " не допускается.
Сторонний класс определяется как:
namespace ThirdPartyNamespace
{
class __declspec(novtable) ThirdPartyClass : public ThirdPartyBaseClass
{
public:
virtual bool Hello() const = 0;
virtual bool Goodbye() const = 0;
};
}
Я создал макет этого:
namespace ThirdPartyNamespace {
class ThirdPartyClassFake : public ThirdPartyClass {
public:
MOCK_CONST_METHOD0(Hello, bool());
MOCK_CONST_METHOD0(Goodbye, bool());
};
}
Теперь в моем тесте я пытаюсь сделать:
TEST(MyService, WhenCalled_DoesTheRightThingTM) {
// Arrange
ThirdPartyClassFake stub;
// Act
...
// Assert
...
}
Ошибка находится на "заглушке ThirdPartyClassFake;" линия. Почему я получаю эту ошибку и как я могу успешно создать фиктивный объект-заглушку?
2 ответа
Конкретно проблема была в том, что хотя я реализовал ThirdPartyClass
Виртуальные методы в моем фиктивном объекте, я забыл реализовать ThirdPartyBaseClass
виртуальные методы. Это было причиной ошибки. Как только я добавил MOCK_METHOD
При вызове этих методов ошибка исчезла.
Учебный класс ThirdPartyClass
является абстрактным классом (две чисто виртуальные функции-члены). Любой класс, производный от него, должен переопределить / реализовать виртуальные методы.