我正在尝试对名为 VariableImpl
的 C++ 类进行单元测试(使用 Boost 单元测试框架)。以下是详细信息。
class Variable
{
public:
void UpdateStatistics (void) {
// compute mean based on m_val and update m_mean;
OtherClass::SendData (m_mean);
m_val.clear ();
}
virtual void RecordData (double) = 0;
protected:
std::vector<double> m_val;
private:
double m_mean;
};
class VariableImpl : public Variable
{
public:
virtual void RecordData (double d) {
// put data in m_val
}
};
我的问题是如何检查平均值是否正确计算?请注意,1) m_mean
受到保护,2) UpdateStatistics
调用另一个类的方法,然后清除 vector 。
我能看到的唯一方法是添加一个 getter(例如,GetMean
),但我根本不喜欢这个解决方案,我认为它也不是最优雅的。
我该怎么办?
如果我要测试私有(private)方法而不是私有(private)变量,我该怎么办?
最佳答案
嗯,unit 测试应该测试units,理想情况下,每个类都是一个独立的单元——这直接遵循单一职责原则。
因此,测试类的私有(private)成员应该是不必要的 - 类是一个黑盒子,可以按原样在单元测试中覆盖。
另一方面,这并不总是正确的,有时是有充分理由的(例如,类的几个方法可能依赖于应该测试的私有(private)实用函数)。一个非常简单、非常笨拙但最终成功的解决方案是将以下内容放入您的单元测试文件中,before 包括定义您的类的 header :
#define private public
当然,这会破坏封装并且是邪恶的。但是对于测试来说,它是有目的的。
关于c++ - 如何对 C++ 类的私有(private)成员(和方法)进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6778496/