C++ 在C+中创建singleton类的实例+;
我有一个单亲班:C++ 在C+中创建singleton类的实例+;,c++,unit-testing,singleton,C++,Unit Testing,Singleton,我有一个单亲班: class foo { static foo* pointer; foo(); public: static foo* instance(); static void destroy(); } foo::foo() { } foo* foo::instance() { if (pointer == 0) pointer = new foo(); return pointer; } void
class foo
{
static foo* pointer;
foo();
public:
static foo* instance();
static void destroy();
}
foo::foo()
{
}
foo* foo::instance()
{
if (pointer == 0)
pointer = new foo();
return pointer;
}
void foo::destroy()
{
delete pointer;
pointer = 0;
}
我正在尝试对这个类进行单元测试(这个类也有其他方法,这里不需要说明)。
我创建了一个MockClassfoo,并将类“foo”继承到MockClassfoo中
我创建了一个假的MockClassfoo实例,如我的测试类中所示:
class Test
{
auto aFake =(MockClassfoo *)MockClassfoo ::instance();
fooAccessor::set(aFake);
}
但是,在我的类fooAccessor中,我希望获得foo的实例。删除指针并在其中分配我的模拟实例,这是不可能的:
class fooAccessor
{
public:
static void set(foo * other)
{
foo::instance();
delete foo::pointer; //here i get error saying pointer is inaccessible
foo::pointer = other; //here i get error saying pointer is inaccessible
}
};
我不想对“foo”类中指针的可访问性做任何更改。我只想获取实例,删除它并将我的模拟实例分配给它。既然它说它不可访问,你有什么建议吗?你需要把
fooAccessor
作为类foo
中的一个好友类。通过这样做,foo
授予fooAccessor
权限,以便访问其私有成员。您需要将fooAccessor
设置为类foo
中的好友类。通过这样做,foo
授予fooAccessor
访问其私有成员的权限。如果MockClassfoo从foo继承,则使foo不是最终的:
关于代码的一些提示:
- 我更喜欢在类的开头添加显式的private:关键字
- 我不喜欢“销毁”方法的想法。改用析构函数
关于代码的一些提示:
- 我更喜欢在类的开头添加显式的private:关键字
- 我不喜欢“销毁”方法的想法。改用析构函数
foo
进行任何更改,您不能破坏此封装。我不能这样做,因为不必对foo进行任何更改。如果您可以上载最完整的示例代码,我们可以在这方面为您提供更多帮助以解决此问题。如果不允许您对foo
进行任何更改,您不能破坏此封装。您不能,坦率地说,您不应该这样做。想象一下,您的类实际上创建了一个适当的单例实例,并简单地执行,static foo*instance(){static foo obj;return&obj;}
yes。。现在怎么办?简短版本:您的体系结构不允许您按原样使用foo
模拟此实例。你就是这么设计的答案在另一座城堡里。既然你不能做你想做的事,我们需要更多的信息来帮助你找到另一座城堡。你不能,坦率地说,你不应该这么做。想象一下,您的类实际上创建了一个适当的单例实例,并简单地执行,static foo*instance(){static foo obj;return&obj;}
yes。。现在怎么办?简短版本:您的体系结构不允许您按原样使用foo
模拟此实例。你就是这么设计的答案在另一座城堡里。既然你不能做你想做的事,我们需要更多的信息来帮助你找到另一座城堡。