繁体   English   中英

使用 FRIEND_TEST 测试另一个命名空间中类的私有函数

[英]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 declarederror: 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM