在测试中使用友谊

Using friendship in test

我正在寻找一种 "clean" 方法来访问测试上下文中的一些私有成员变量,而无需触及原始代码。我正在考虑实现与测试 class 的 友谊 关系,但出于某种原因我不明白它仍然需要 protected访问器才能工作。为什么会这样?还有其他方法可以访问私有成员变量吗?

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;
};

您不能从派生的 class 访问私有变量,只能访问受保护的。

TestATestableA 的朋友,因此它可以看到 TestableA 包含的所有内容。但是如果 a 是私有的,你就不能在 TestableA.

中访问它

您有多种选择:

  • 到处使用受保护
  • 将朋友声明直接添加到 class A。您甚至可以使用仅影响 debug/test 构建的宏来实现。

有关此主题的更多信息,有一个很好的演示文稿 Friendship in Service of Testing