您可以将 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
。
另一种选择是直接A::Method1
调用,在 B 类中创建一个仿函数对象(可能是 std::function 类型),然后在 Method2 中调用它。然后,它更简单,因为您不需要 MockA,因为您将创建一个回调到 MockCalc::Method1 到这个对象。像这样的东西:
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);};