你可以改变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);};
我不熟悉gmock,但不能你只是链接'B.o'和'mockA.o'? – Beta
据我所知,处理静态方法有一些不同的方法。 我可以解决这个问题,将Method1设置为虚拟的,并在类B中添加构造函数,因此它看起来像B(A和a):a_in_class_b(a){},然后调用Method1将如下所示:a_in_class_b - >方法1(); 但我想看看是否有其他方法。 – Jonhtra