谷歌模拟:不允许抽象类类型“xyz”的对象?

时间:2011-06-29 23:47:13

标签: c++ unit-testing googletest googlemock

将Visual Studio 2010 C ++与GMock一起使用。尝试为我的类使用的第三方类创建存根对象,但是我收到以下错误:

  

错误:抽象类类型的对象   

第三方类的定义如下:

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 个答案:

答案 0 :(得分:3)

具体问题是虽然我在模拟对象中实现了ThirdPartyClass的虚方法,但我忽略了实现ThirdPartyBaseClass的虚方法。这导致了错误。一旦我为这些方法添加MOCK_METHOD次调用,错误就会消失。

答案 1 :(得分:2)

ThirdPartyClass是一个抽象类(两个纯虚拟成员函数)。任何派生自它的类必须覆盖/实现虚拟方法。