クラスBをテンプレートに変更できます:
template< typename T >
class B
{
public:
static int Method2(int a, int b){ return T::Method1(a,b);}
};
次に、モックを作成します。
struct MockA
{
static MockCalc *mock;
static int Method2(int a, int b){ return mock->Method1(a,b);}
};
class MockCalc {
public:
MOCK_METHOD2(Method1, int(int,int));
};
すべてのテストの前に、静的モックオブジェクトを初期化しますMockA::mock
。
もう1つのオプションは、代わりに直接呼び出しA::Method1
、クラスBでファンクターオブジェクト(おそらくstd :: function type)を作成し、それをMethod2で呼び出すことです。次に、このオブジェクトへのMockCalc :: Method1へのコールバックを作成するため、MockAが不要になるため、より簡単になります。このようなもの :
class B
{
public:
static std::function< int(int,int) > f;
static int Method2(int a, int b){ return f(a,b);}
};
class MockCalc {
public:
MOCK_METHOD2(Method1, int(int,int));
};
そしてそれを初期化するには:
MockCalc mock;
B::f = [&mock](int a,int b){return mock.Method1(a,b);};