静态指针指向这个为mock for googletest定义的类内部

Static pointer to this defined inside class for mock for googletest

本文关键字:googletest for 定义 内部 mock 指针 静态      更新时间:2023-10-16

我试图理解为什么生产中的一段代码是以以下方式设计的:为了给人们一些上下文,有一个类a包含一个方法,称之为some_method,需要对其进行模拟。mock和所有测试都需要与生产代码隔离。因此,我的同事们以以下方式在测试文件夹中重新定义了这个类:

class A
{
class mockA
{
public: 
mockA()
{
pointer_mockA = this;
}
virtual ~mockA(){
pointer_mockA = NULL;
}
MOCK_METHOD1(some_method, string&(bool x));
static mockA* pointer_mockA;
}
string &some_method(bool x);
}

同样在头文件中,some_method((以以下方式定义:

string& some_method(bool x)
{
return mockA::pointer_mockA->some_method(x);
}

mockA::pointer_A在cpp测试文件中初始化为NULL。

问题

  1. pointer_mockA作为静态指针是否指向类a的当前实例?或者只是为什么要使用它
  2. 为什么在这个测试头文件中重新定义了类A,而它已经存在于需要测试的代码所在的文件夹中
  3. 这种设计常见吗?没有其他更简单的设计了吗
  4. 非常感谢对代码的任何其他评论

1。pointer_mockA指向最后创建的实例或nothing/nullptr。它在应用程序启动后和mockA对象的每次销毁后都不指向任何东西。

2。原因可能是,因为mockA是a的嵌套类。不幸的是,c++不允许对这些嵌套类进行独立定义。只能在外部类中转发声明嵌套类,然后再定义它。

3。这很常见吗?我会说不。有一些奇怪的事情:为什么pointer_mockA是一个公共字段。为什么会有这个静态指针?宏MOCK_METHOD1的定义是什么?成为多态类(虚拟析构函数(重要吗?