我刚刚开始进行单元测试(使用BOOST框架进行测试,但对于模拟我必须使用Google Mock)我有这样的情况:
class A
{
static int Method1(int a, int b){return a+b;}
};
class B
{
static int Method2(int a, int b){ return A::Method1(a,b);}
};
所以,我需要创建模拟类A,并使我的类B不使用来自A类的真正的Method1,而是使用mock。
我不知道该怎么做,我找不到类似的例子。
您可以将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);};