在测试中使用友谊

Using friendship in test

本文关键字:友谊 测试      更新时间:2023-10-16

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

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

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

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

你有几个选择:

  • 处处使用受保护的
  • 将友元声明直接添加到类A中。您甚至可以使用宏来执行此操作,它只影响调试/测试构建

关于这个主题的更多信息,有一个很好的演示,叫做测试的友谊