我刚开始进行单元测试(使用 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,而是使用模拟。
我不知道该怎么做,也找不到类似的例子。
最佳答案
您可以将 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);};
关于c++ - Google Mock 单元测试静态方法 c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8942330/