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



使用带有GMock的Visual Studio 2010 C++。试图为我的类使用的第三方类创建存根对象,但我得到了以下错误:

错误:抽象类类型的对象不允许使用"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 stub;"行。为什么我会出现这个错误,以及如何成功创建mock/stub对象?

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

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

最新更新