在测试中使用友谊

时间:2016-07-21 09:53:42

标签: c++ testing friend

我正在寻找一个"清洁"在不触及原始代码的情况下访问测试上下文中的某些私有成员变量的方法。我正在考虑与测试类实现友谊关系,但出于某种原因我不明白它仍然需要受保护的访问器才能工作。为什么会那样?有没有其他方法可以访问私有成员变量?

class A
{
protected:    // this works
// private:   // this DOES not work


    int a;
};

class TestableA : public A
{
    friend class TestA;
};

class TestA
{
    void test()
    {
        m_a.a = 100;
    }

    TestableA m_a;
};

1 个答案:

答案 0 :(得分:3)

您无法从派生类访问私有变量,只能访问受保护的。

TestATestableA的朋友,因此可以查看TestableA包含的所有内容。但如果a是私密的,则无法在TestableA中访问它。

您有几种选择:

  • 使用受保护的地方
  • 直接将好友声明添加到班级A。您甚至可以使用宏来实现,这只会影响调试/测试版本。

有关此主题的更多信息,请参阅名为Friendship in Service of Testing

的精彩演示文稿