在测试中使用友谊
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 访问私有变量,只能访问受保护的。
TestA
是 TestableA
的朋友,因此它可以看到 TestableA
包含的所有内容。但是如果 a
是私有的,你就不能在 TestableA
.
中访问它
您有多种选择:
- 到处使用受保护
- 将朋友声明直接添加到 class
A
。您甚至可以使用仅影响 debug/test 构建的宏来实现。
有关此主题的更多信息,有一个很好的演示文稿 Friendship in Service of Testing
我正在寻找一种 "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 访问私有变量,只能访问受保护的。
TestA
是 TestableA
的朋友,因此它可以看到 TestableA
包含的所有内容。但是如果 a
是私有的,你就不能在 TestableA
.
您有多种选择:
- 到处使用受保护
- 将朋友声明直接添加到 class
A
。您甚至可以使用仅影响 debug/test 构建的宏来实现。
有关此主题的更多信息,有一个很好的演示文稿 Friendship in Service of Testing