Google Mock: объект абстрактного класса типа "xyz" не допускается? - PullRequest
2 голосов
/ 30 июня 2011

Использование 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 ]

3 голосов
/ 30 июня 2011

В частности, проблема заключалась в том, что, хотя я реализовал виртуальные методы ThirdPartyClass в моем фиктивном объекте, я не стал реализовывать виртуальные методы ThirdPartyBaseClass.Это было причиной ошибки.Как только я добавил MOCK_METHOD вызовы для этих методов, ошибка исчезла.

2 голосов
/ 30 июня 2011

Класс ThirdPartyClass является абстрактным классом (две чисто виртуальные функции-члены). Любой класс, производный от него , должен переопределить / реализовать виртуальные методы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...