4

Visual Studio 2010C++を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スタブ」にあります。ライン。このエラーが発生するのはなぜですか?モック/スタブオブジェクトを正常に作成するにはどうすればよいですか?

4

2 に答える 2

5

具体的にはThirdPartyClass、モックオブジェクトに仮想メソッドを実装したのに、ThirdPartyBaseClass仮想メソッドの実装を怠ったことが問題でした。これがエラーの原因でした。これらのメソッドの呼び出しを追加MOCK_METHODすると、エラーはなくなりました。

于 2011-06-30T02:42:26.037 に答える
3

クラスThirdPartyClassは抽象クラスです(2つの純粋仮想メンバー関数)。それから派生するクラスは、仮想メソッドをオーバーライド/実装する必要があります。

于 2011-06-29T23:59:19.703 に答える