c++ - Google Mock 单元测试静态方法 c++

标签 c++ googletest googlemock

我刚开始进行单元测试(使用 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/

相关文章:

c++ - google test 如何制作测试序列

matcher - 用于输出参数的 googlemock 匹配器

c++ - MOCK 接受 unique_ptr 的方法

c++ - 与 Visual Studio 2010 的静态 libpng 链接

C++ 返回临时对象的问题

c# - 无法将托管 .dll 添加到 C# 项目中

c++ - 为什么建议包含googletest源文件

googletest - 如何告诉 Cppcheck 跳过头文件

c++ - 具有 unique_ptr 引用类型参数的模拟函数的 EXPECT_CALL

c++ - 嵌入式Linux应用程序中的周期 "lags"