我有一个单元测试类Tester
;我希望它访问Working
类的私有(private)字段。
class Working {
// ...
private:
int m_variable;
};
class Tester {
void testVariable() {
Working w;
test( w.m_variable );
}
}
我有以下选择:
public
-丑陋的test_getVariable()
-过于复杂的friend class Tester
添加到Working中-然后显式地“了解”测试仪,这是不好的我的理想是
class Working {
// ...
private:
int m_variable;
friend class TestBase;
};
class TestBase {};
class Tester : public TestBase {
void testVariable() {
Working w;
test( w.m_variable );
}
}
Working知道TestBase的地方,但不是每个测试都知道的地方...但是它不起作用。显然,友元对继承无效。
这里最优雅的解决方案是什么?
最佳答案
通常,您的单元测试不应评估私有(private)变量。将测试写入接口(interface),而不是实现。
如果您确实需要检查私有(private)变量是否具有特定特征,请考虑使用assert()
而不是尝试为其编写单元测试。
更长的答案(是为C#而不是C++编写的,但适用相同的原理)在https://stackoverflow.com/a/1093481/436641上。