C++ 指向为Google测试的mock定义的类内部的静态指针

C++ 指向为Google测试的mock定义的类内部的静态指针,c++,pointers,static,mocking,googletest,C++,Pointers,Static,Mocking,Googletest,我试图理解为什么生产中的一段代码是按以下方式设计的: 为了给人们提供一些上下文,有一个类a包含一个方法,称之为some_method,需要模仿。模拟和所有测试都需要与生产代码隔离。因此,我的同事所做的是用以下方式在测试文件夹中重新定义这个类: class A { class mockA { public: mockA() { pointer_mockA = this; }

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

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

问题

  • 指针作为静态指针是否指向类a的当前实例?或者仅仅是为什么要使用它
  • 为什么在这个测试头文件中重新定义了类A,而它已经存在于需要测试的代码所在的文件夹中
  • 这种设计常见吗?没有其他更简单的设计吗
  • 非常感谢您对本规范的任何其他意见
  • 一,。 指针\u moka指向最后创建的实例或nothing/nullptr。在应用程序启动后以及每次销毁一个mockA对象后,它都没有指向任何内容

    二,。 原因可能是因为MOCKA是嵌套的A. Unfortenately C++类,不允许对那些嵌套类进行隔离定义。只能在外部类中向前声明嵌套类并在以后定义它

    三,。 这很普遍吗?我会说不。有一些奇怪的事情:为什么pointer_Moka是一个公共领域。为什么会有这个静态指针?宏模拟方法1的定义是什么? 成为多态类(虚拟析构函数)重要吗