如何用gmock模拟构造函数和析构函数
How to mock constructors and destructor with gmock
我需要计算构造函数(default/copy/move)和析构函数被调用的次数。我用gmock。我该怎么查?
编辑:感谢马尔科·波波维奇的建议,我会解释我现在有。我有这样一节课,我想用gmock来嘲笑它。我该怎么做?
class A
{
public:
static int m_calls_to_cons;
public:
A( ) { m_calls_to_cons++; }
};
int A::m_calls_to_cons;
我使用这个类来检查容器的行为。
首先,您必须指定您需要的内容。实现这一点的方法是定义接口类:
class SpecialFunctionsNotifier
{
public:
virtual ~SpecialFunctionsNotifier() {}
virtual void construct() = 0;
virtual void destruct() = 0;
virtual void copyConstruct() = 0;
virtual void copyAssign() = 0;
};
因此,您可以使"default"为null(意思是空的)对象实现:
class SpecialFunctionsNullNotifier : public SpecialFunctionsNotifier
{
public:
virtual void construct() override {}
virtual void destruct() override {}
virtual void copyConstruct() override {}
virtual void copyAssign() override {}
};
并且,让A
使用它:
class A
{
public:
static SpecialFunctionsNullNotifier m_calls_to_cons_default;
static SpecialFunctionsNotifier* m_calls_to_cons;
public:
A( ) { m_calls_to_cons->construct(); }
};
SpecialFunctionsNullNotifier A::m_calls_to_cons_default;
SpecialFunctionsNotifier* A::m_calls_to_cons = &A::m_calls_to_cons_default;
然后,嘲笑这个通知是一项简单的任务:
class SpecialFunctionsNotifierMock : public SpecialFunctionsNotifier
{
public:
MOCK_METHOD0(construct, void());
// ..
};
在你的测试中,以这种方式使用:
TEST(ACase, AConstructCount)
{
SpecialFunctionsNotifierMock callToConsMock;
A::m_calls_to_cons = &callToConsMock;
EXPECT_CALL(callToConsMock, construct()).Times(100);
A a[100];
// remember to cleanup
A::m_calls_to_cons = &A::m_calls_to_cons_default;
}
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 在c++中使用向量时,如何调用构造函数和析构函数
- 为什么在使用转换构造函数赋值后调用C++类的析构函数?
- 不命名构造函数和析构函数上的类型错误
- 在 UML 类图中为C++类添加构造函数和析构函数
- 基类中的默认析构函数禁用子类中的移动构造函数(如果有成员)
- 为什么类构造函数为其成员生成析构函数?
- makefile对我的名称空间对象/函数/构造函数的不确定引用
- 没有可调用的匹配函数(构造函数),候选函数不同于对给定类型的引用
- C++库制作,隐藏在标头中没有友元的析构函数/构造函数
- 从另一个成员函数/构造函数调用C++构造函数是否执行初始值设定项列表
- 在另一个函数/构造函数 [C++] 中初始化后使变量只读
- std::调用函数时找不到函数构造函数
- 显式调用基类析构函数/构造函数合法吗
- 函数构造函数和nullptr
- 用委托构造函数构造函数
- 虚函数构造函数和调用虚函数时会发生什么
- 一些Qt函数/构造函数参数的内存管理
- 使用for_each或std::transform时,c++函函数构造函数是如何被调用的?
- std函数构造函数初始化