テンプレート化されたメソッドをモックしようとしています。
mock するメソッドを含むクラスは次のとおりです。
class myClass
{
public:
virtual ~myClass() {}
template<typename T>
void myMethod(T param);
}
Google Mock を使用してメソッド myMethod をモックするにはどうすればよいですか?
テンプレート化されたメソッドをモックしようとしています。
mock するメソッドを含むクラスは次のとおりです。
class myClass
{
public:
virtual ~myClass() {}
template<typename T>
void myMethod(T param);
}
Google Mock を使用してメソッド myMethod をモックするにはどうすればよいですか?
以前のバージョンの 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);
}
};