我可以在 class 中初始化引用吗? (也许在构造函数中?)
Can I initialize references in a class? (perhaps in the constructor?)
我的 C++ 有点生疏,尤其是 references.
我有一个旧代码,类似于
TEST(SomeTest,someFunction){
AClass anObject= GetSomeObject();
ASingletonClass &aReference= ASingletonClass::GetInstance();
//... some more code
}
由于设计的原因,我不得不重写这段代码,这次我不得不使用辅助class (*)
class ASingletonClassFixture: public testing:Test{
public:
void SetUp() override
{
anObject=GetSomeObject();
aReference= ASingletonClass::GetInstance();
}
protected:
AClass anObject;
ASingletonClass &aReference; //<--I don't think this is correct
}
我认为上面的代码不正确,因为引用应该在创建时进行初始化。
所以我的问题是我怎样才能做这样的事情?我可以在构造函数中完成吗?
(*) 如果您有兴趣 - 虽然不是必须知道 - 是因为我正在编写测试夹具。
是的,您可以在测试构造函数中进行 - 甚至是推荐的方式:
class ASingletonClassFixture: public testing::Test{
public:
ASingletonClassFixture() : aReference{ASingletonClass::GetInstance()} {}
void SetUp() override
{
anObject=GetSomeObject();
}
protected:
AClass anObject;
ASingletonClass &aReference; //<--I don't think this is correct
};
参见this FAQ。
但是,请注意,即使构造函数和 SetUp 在 each 测试主体之前被调用(顺序始终是 ctor、SetUp、 test body, TearDown, dtor),假设你使用的是单例 - 它只会被初始化一次,它的状态将在测试用例之间共享!更重要的是,如果您在同一个测试二进制文件中有更多的测试套件,因为单例很可能是作为静态对象实现的,它将为整个测试二进制文件初始化一次,并在 main
方法的 main
方法中取消初始化二进制退出。
我的 C++ 有点生疏,尤其是 references.
我有一个旧代码,类似于
TEST(SomeTest,someFunction){
AClass anObject= GetSomeObject();
ASingletonClass &aReference= ASingletonClass::GetInstance();
//... some more code
}
由于设计的原因,我不得不重写这段代码,这次我不得不使用辅助class (*)
class ASingletonClassFixture: public testing:Test{
public:
void SetUp() override
{
anObject=GetSomeObject();
aReference= ASingletonClass::GetInstance();
}
protected:
AClass anObject;
ASingletonClass &aReference; //<--I don't think this is correct
}
我认为上面的代码不正确,因为引用应该在创建时进行初始化。
所以我的问题是我怎样才能做这样的事情?我可以在构造函数中完成吗?
(*) 如果您有兴趣 - 虽然不是必须知道 - 是因为我正在编写测试夹具。
是的,您可以在测试构造函数中进行 - 甚至是推荐的方式:
class ASingletonClassFixture: public testing::Test{
public:
ASingletonClassFixture() : aReference{ASingletonClass::GetInstance()} {}
void SetUp() override
{
anObject=GetSomeObject();
}
protected:
AClass anObject;
ASingletonClass &aReference; //<--I don't think this is correct
};
参见this FAQ。
但是,请注意,即使构造函数和 SetUp 在 each 测试主体之前被调用(顺序始终是 ctor、SetUp、 test body, TearDown, dtor),假设你使用的是单例 - 它只会被初始化一次,它的状态将在测试用例之间共享!更重要的是,如果您在同一个测试二进制文件中有更多的测试套件,因为单例很可能是作为静态对象实现的,它将为整个测试二进制文件初始化一次,并在 main
方法的 main
方法中取消初始化二进制退出。