4

使用带有 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 存根;” 线。为什么会出现此错误,如何成功创建模拟/存根对象?

4

2 回答 2

5

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

于 2011-06-30T02:42:26.037 回答
3

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

于 2011-06-29T23:59:19.703 回答