[英]Using FRIEND_TEST to test private functions of a class in another namespace
我正在尝试使用 GTest 的FRIEND_TEST()
宏来启用对来自另一个命名空间的一些私有函数的测试。 但是,我无法克服一些错误,尽管我必须遗漏一些简单的东西。
我有Tests.cpp
我想测试MyClass
的私有功能:
namespace a::b::tests
{
class MyTests : public ::testing::Test { ... };
TEST_F(MyTests, Test1)
{
// Test private functions of MyClass instance from MyClass.cpp
...
}
}
在MyClass.h
中,在MyClass.cpp
中实现,我有:
namespace a::b
{
class MyTests_Test1_Test; // Forward declaration.
class MyClass
{
private:
FRIEND_TEST(a::b::tests::MyTests, Test1);
...
};
}
但是,这会失败并出现编译时错误'a::b::tests' has not been declared
和error: friend declaration does not name a class or function
。
如果我尝试通过添加using a::b::tests;
在MyClass.h
中,错误仍然存在。
我怎样才能在这里正确地使MyTests
成为MyClass
的朋友类?
您需要为a::b::tests::MyTests
添加前向声明,因为您已经在与头文件MyClass.h
不同的源文件Tests.cpp
中实现了它,并且在您编写的位置FRIEND_TEST(a::b::tests::MyTests, Test1);
编译器不知道有一个类a::b::tests::MyTests
。
因此,要解决此问题,请将其添加到您的头文件MyClass.h
中:
我的类.h
namespace a::b::tests
{
//-------------v-------------->note only a declaration and not a definition
class MyTests;//added this forward declaration
}
////////////////////////////
//now we can write the below code exactly as before since we have a forward declaration for a::b::tests::MyTests
namespace a::b
{
class MyTests_Test1_Test;
class MyClass
{
private:
FRIEND_TEST(a::b::tests::MyTests, Test1);
...
};
}
原来我必须在MyClass.h
中做这样的前向声明:
namespace a::b::tests
{
class MyTests;
class MyTests_Test1_Test;
}
namespace a::b
{
class MyClass
{
private:
FRIEND_TEST(a::b::tests::MyTests, Test1);
...
};
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.