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 является абстрактным классом (две чисто виртуальные функции-члены). Любой класс, производный от него, должен переопределить / реализовать виртуальные методы.

Другие вопросы по тегам