我正在为我的项目在 QT 中实现一个测试类。我已经为所有公共函数添加了测试,但是有几个私有函数希望包含在我的测试中。
显然这是行不通的,因为它们是私有成员函数,但我想知道是否可以在我想从测试用例访问它们的基础上绕过它,我不想更改我的代码以便我的测试工作,因为那不是真的很有帮助,我喜欢这些功能是私有的,但我也希望能够测试它们。
只是想知道是否有人对这是否可能有任何想法,或者我是否需要将我的函数更改为受保护的或其他东西,然后为我的测试继承该类?
通常的做法是只对公共函数进行单元测试,但您可以将测试类作为原始类的朋友。像这样的东西:
朋友的声明应该在#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;
}
选项一。您的函数可能有条件地是公有私有的
#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;
};