在 googletest 中访问受保护的变量

The*_*red 2 c++ protected googletest

我有这个类 testC 用于谷歌测试

class testC : public A { };
Run Code Online (Sandbox Code Playgroud)

然后是同一文件中的一堆测试。

TEST(test_case_name, test_name) {
 ... test body ...
}
Run Code Online (Sandbox Code Playgroud)

A的结构是这样的

class A{

protected:
   B b;
public:
   //constructors
   //destructor
   //member functions
Run Code Online (Sandbox Code Playgroud)

问:如何通过访问b所有功能?TEST(){}testC

我尝试做一个吸气剂testC

public:
  testC getTest(){
      testC test;
      return test;
  }
Run Code Online (Sandbox Code Playgroud)

我也尝试返回参考,但没有运气......

anh*_*ppe 5

尝试 googletest 提供的 FRIEND_TEST 宏。请查看私人班级成员下的高级指南。

您必须将测试声明为被测代码的友元。如果我没记错的话,您必须声明所有想要访问受保护成员的测试的友谊。

class MySystemUnderTest
{
    #ifdef _MY_UNIT_TEST
    FRIEND_TEST(MySystemUnderTest_test, functionA_prereq_expected);
    FRIEND_TEST(MySystemUnderTest_test, functionB_prereq_expected);
    #endif

    ...
};
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,我使用预处理器符号 _MY_UNIT_TEST 从生产代码中删除声明。方法functionA_prereq_expectedfunctionB_prereq_expected将在测试装置MySystemUnderTest_test中定义。

您必须在被测试的代码中添加FRIEND_TEST声明。如果您想针对受保护/私有成员进行测试,这就是您必须付出的代价。