在使用 google test 测试子类时访问基类的受保护函数/成员

问题描述 投票:0回答:1

我看到了 这个问题与我的问题非常相似,但有一点不同。我试图访问的不是 ToBeTested 类的受保护成员,而是其派生类的受保护成员。我根据我的问题更新了该帖子中提到的解决方案。 (我使用的是在线编译器,因此由于缺少 if gtest 文件而无法编译)

class Base
{

public:
   Base(const int  &config);
   Base() = delete;
   virtual ~Base();
protected:   
   virtual int pureVirtualFoo() = 0;
   void fooToAccess();
    int parameterToAccess;
};
 
class Child: public Base
{
public:
   Child(const int  &config);
   Child() = delete;
   virtual ~Child();
   
protected:
   int pureVirtualFoo()  { return 0; };
};


class ChildStub : public Child
{

 public:
   ChildStub(int config): Child(config){};
   FRIEND_TEST(ChildTestFixture, test1);
};


class ChildTestFixture //: public ::testing::Test
{
 protected:
   std::unique_ptr<ChildStub> stub;
   int config = 0;
   virtual void SetUp()
   {
      stub = std::unique_ptr<ChildStub>( new ChildStub(config));
   }
   virtual void TearDown()
   {
   }
};

TEST_F(ChildTestFixture, test1)
{

   stub->fooToAccess();
   stub->parameterToAccess;
}
c++ googletest
1个回答
-1
投票

相当暴力,但它有效:公开 ChildStub 中受保护的成员。

class ChildStub : public Child
{

 public:
   ChildStub(int config): Child(config){};
   FRIEND_TEST(ChildTestFixture, test1);

   void fooToAccess() { Base::fooToAccess(); }
   int & getParameterToAccess() { return Base::parameterToAccess; }
};
© www.soinside.com 2019 - 2024. All rights reserved.