我在QT中为我的项目实现了一个测试类。我已经为所有公共函数添加了测试,但是有一些私有函数可能包含在我的测试中。
显然这不会起作用,因为它们是私有成员函数,但我想知道是否可以绕过我想从测试用例访问它们,我不特别想改变我的代码以便我的测试工作因为那不是很有帮助,我喜欢私有的功能,但我也希望能够测试它们。
只是想知道是否有人对这是否可能有任何想法,或者我是否需要将我的功能更改为受保护的东西,然后继承我的测试类?
答案 0 :(得分:2)
通常的做法是只对单元测试公共函数进行单元测试,但您可以将测试类作为原始类的朋友。这样的事情:
朋友的诽谤应该在#define UNIT_TEST
旗帜内。
#include <iostream>
class ToTestClass
{
#ifdef UNIT_TEST
// ToTestClass declares TesterClass as a friend.
friend class TesterClass;
#endif
private:
void privateMethod()
{
std::cout << "hey there" << std::endl;
}
};
class TesterClass
{
public:
TesterClass()
{
ToTestClass totest;
// TesterClass now has access to ToTestClass's private members and methods.
totest.privateMethod();
}
};
int main()
{
TesterClass tester;
return 0;
}
答案 1 :(得分:1)
选项一。您的职能可能是有条件的公共私人
#ifdef UNIT_TEST
#define ut public
#else
#define ut private
class Testee
{
public:
....
ut:
//private functions to be tested
ptivate:
};
然后,在您的测试标题中,只需
#define UNIT_TEST
#include <Testee.h>
如果测试和应用程序在同一个项目(程序)中,这有点危险,因为根据标准,类定义在同一程序中的所有翻译单元中必须相同,否则,未定义的行为。
其次,更容易和更安全的选择是将Tester类声明为朋友。
class Testee
{
public:
....
ptivate:
....
friend class Tester;
};