26

テンプレート化されたメソッドをモックしようとしています。

mock するメソッドを含むクラスは次のとおりです。

class myClass
{
public:
    virtual ~myClass() {}

    template<typename T>
    void myMethod(T param);
}

Google Mock を使用してメソッド myMethod をモックするにはどうすればよいですか?

4

2 に答える 2

13

以前のバージョンの Google Mock では、仮想関数のモックしかできませんでした。プロジェクトのページにあるドキュメントを参照してください。

最近のバージョンでは、高パフォーマンスの依存性注入と呼ばれるものを使用して、非仮想メソッドをモックすることができました。

ユーザー@congusbongusがこの回答の下のコメントで述べているように:

Google Mock は、メソッドのモックをサポートするためにメンバー変数を追加することに依存しています。また、テンプレート メンバー変数を作成できないため、テンプレート関数をモックすることは不可能です。

コメントからのgooglegroupsリンクのMichael Harringtonによる回避策は、モックできる通常の関数を呼び出すテンプレートメソッドを特殊化することです。一般的なケースは解決しませんが、テストには機能します。

struct Foo
{
    MOCK_METHOD1(GetValueString, void(std::string& value));

    template <typename ValueType>
    void GetValue(ValueType& value); 

    template <>
    void GetValue(std::string& value) {
        GetValueString(value);
    } 
};
于 2010-08-06T20:37:31.547 に答える