Google Mock 单元测试静态方法 c

新手上路,请多包涵

我刚开始进行单元测试(使用 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,而是使用模拟。

我不知道该怎么做,也找不到类似的例子。

原文由 Jonhtra 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
1 个回答

您可以将 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);};

原文由 BЈовић 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题