我看到了 这个问题与我的问题非常相似,但有一点不同。我试图访问的不是 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;
}
相当暴力,但它有效:公开 ChildStub 中受保护的成员。
class ChildStub : public Child
{
public:
ChildStub(int config): Child(config){};
FRIEND_TEST(ChildTestFixture, test1);
void fooToAccess() { Base::fooToAccess(); }
int & getParameterToAccess() { return Base::parameterToAccess; }
};