如何测试类的私有成员函数
如何测试类的私有成员函数
base.h的内容
class Base
{
public:
virtual void run(void) = 0;
static Base& instance(void);
};
a.cpp的内容
#include "base.h"
class A : public Base
{
public:
virtual void run(void)
{
std::cout << "A.run() called." << std::endl;
f1();
f2();
}
private:
void f1(void)
{
}
void f2(void)
{
}
};
Base& Base::instance(void)
{
static A sa;
return sa;
}
现在,我如何测试A.f1, A.f2 ?
如何测试A.f1, A.f2 ?
把f1,f2定义成A的Public方法,且增加头文件a.h
class A : public Base
{
public:
virtual void run(void);
void f1(void);
void f2(void);
};
然后在a.cpp中写实现,但这样原本封装在A的实现中的f1,f2暴露了。
如果需要测试类中的私有成员函数,一种常用的方法是使用友元类或友元函数,在测试类中通过友元关系访问私有成员。
另外一种方法是使用私有继承。在测试类中继承需要测试的类,由于继承是类型转换关系,所以测试类可以访问父类的私有成员。
代码示例如下:
class A;
class TestA
{
public:
void testF1(A& a);
};
class A : public Base
{
friend class TestA;
private:
void f1(void);
void f2(void);
};
void TestA::testF1(A& a)
{
a.f1();
}
class TestA
{
public:
void testF1(A& a);
};
原来A在a.cpp中,对外完全不可见。
按你的思路,需要将A提出到a.h中吧。
另外,由于在A中增加友元类TestA,对A是侵入式修改,而且TestA会业务代码一起编译,这些都不是我希望的。