【发布时间】:2014-06-13 13:29:00
【问题描述】:
对于我系统中的单例类,在我的类测试(代码覆盖率分析部分)期间,我很难将析构函数报告为“已覆盖”。我认为这是因为测试框架在我的静态单例实例之前被破坏,因此我试图通过稍后创建单例实例来更改破坏顺序 - 而不是在程序启动时。
我的公共 getInstance 方法现在看起来像这样:
SingletonClass* SingletonClass::getInstance()
{
static SingletonClass instance;
return &instance;
}
构造函数像往常一样是私有的,但我没有经典的单例静态实例指针作为类成员。相反,我将实例存储为静态函数内部数据(如上所示),这是第一次调用 getInstance 方法时创建的。
我认为 C++ 标准规定静态函数内部变量以相反的创建顺序被破坏。使用 getInstance 的这个解决方案,在类测试代码覆盖分析期间,据报告析构函数被“覆盖”了,所以看来我的理论至少在那里没有被证明是错误的。
这引出了三个问题:
我能有更经典的单例实现吗? 而是静态类成员,并显式调用析构函数 在课堂考试中?在这种情况下,静态数据会发生什么, 它真的会被释放吗?
我关于破坏顺序和影响的理论是否 代码覆盖率分析似乎完全令人难以置信?
我当前的实现是否有任何明显的问题 获取实例?我的程序是单线程的。
谢谢
【问题讨论】:
标签: c++ unit-testing static singleton