指向 this 的静态指针在 class 内定义,用于模拟 googletest
Static pointer to this defined inside class for mock for googletest
我试图理解为什么生产中的一段代码是按以下方式设计的:
为了给人们一些上下文,有一个 class A 包含一个方法,称之为 some_method,需要被嘲笑。模拟和所有测试需要与生产代码隔离。所以我的同事们所做的就是按照以下方式在测试文件夹中重新定义这个 class:
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。
问题
- pointer_mockA 是否作为静态指针指向 class A 的当前实例?或者只是为什么使用它?
- 为什么class A 在这个测试头文件中重新定义,而它已经存在于需要测试的代码所在的文件夹中?
- 这种设计常见吗?就没有其他更简单的设计了吗?
- 非常感谢对代码的任何其他评论。
1。
pointer_mockA 指向最后创建的实例或指向空/nullptr。在应用程序启动后和每次销毁 mockA 对象后,它都指向任何内容。
2。
原因可能是,因为 mockA 是 A 的嵌套 class。不幸的是,c++ 不允许单独定义那些嵌套的 classes。只能在外class中转发声明一个嵌套的class,然后再定义它。
3。
常见吗?我会说不。有一些奇怪的事情:为什么 pointer_mockA 是一个 public 字段。为什么会有这个静态指针?宏MOCK_METHOD1的定义是什么?
多态class(虚析构函数)重要吗?
我试图理解为什么生产中的一段代码是按以下方式设计的: 为了给人们一些上下文,有一个 class A 包含一个方法,称之为 some_method,需要被嘲笑。模拟和所有测试需要与生产代码隔离。所以我的同事们所做的就是按照以下方式在测试文件夹中重新定义这个 class:
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。
问题
- pointer_mockA 是否作为静态指针指向 class A 的当前实例?或者只是为什么使用它?
- 为什么class A 在这个测试头文件中重新定义,而它已经存在于需要测试的代码所在的文件夹中?
- 这种设计常见吗?就没有其他更简单的设计了吗?
- 非常感谢对代码的任何其他评论。
1。 pointer_mockA 指向最后创建的实例或指向空/nullptr。在应用程序启动后和每次销毁 mockA 对象后,它都指向任何内容。
2。 原因可能是,因为 mockA 是 A 的嵌套 class。不幸的是,c++ 不允许单独定义那些嵌套的 classes。只能在外class中转发声明一个嵌套的class,然后再定义它。
3。 常见吗?我会说不。有一些奇怪的事情:为什么 pointer_mockA 是一个 public 字段。为什么会有这个静态指针?宏MOCK_METHOD1的定义是什么? 多态class(虚析构函数)重要吗?