将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存根”;线。为什么我会收到此错误,如何成功创建模拟/存根对象?
答案 0 :(得分:3)
具体问题是虽然我在模拟对象中实现了ThirdPartyClass
的虚方法,但我忽略了实现ThirdPartyBaseClass
的虚方法。这导致了错误。一旦我为这些方法添加MOCK_METHOD
次调用,错误就会消失。
答案 1 :(得分:2)
类ThirdPartyClass
是一个抽象类(两个纯虚拟成员函数)。任何派生自它的类必须覆盖/实现虚拟方法。