在C ++类中设计函数时,我经常会记住测试。因此,当我完成一个类的所有功能主义者时,通常还会在类中添加几个仅用于测试目的的函数。请看以下示例:
class SimpleClass
{
public:
int a;
int b;
void fun1();
void fun2();
void testIntermediateResult();
private:
void _fun1();
void _fun2();
};
在此功能testIntermediateResult
仅用于测试目的。将函数留在课堂中是否是一个好习惯,或者我应该这样做:
class SimpleClass
{
public:
int a;
int b;
void fun1();
void fun2();
#ifdef TESTING
void testIntermediateResult();
#endif
private:
void _fun1();
void _fun2();
};
这里的理念是当这个类已经完成测试并将被提供给客户端然后将定义TESTING并且该函数将不在该类中。因此,我的问题是:当将类提供给客户端时,是否真的需要删除测试函数?假设客户端不使用测试功能,在类中添加多个冗余测试功能有什么影响?谢谢。
答案 0 :(得分:3)
我假设您的客户不会参与测试您正在移交的课程。我不想将测试函数直接添加到类本身中,因为它们可能会破坏类的行为。至于客户端,我宁愿不给它们带有测试功能的东西,因为:
如果他们没有看到它,那就更简单了。至于使用预处理器,这可能会遇到问题,特别是如果你需要以同样的方式保护属性。如果错过了其中任何一个,或者客户端在构建过程中重新定义了宏,那么由于类大小不匹配等原因,您可能会遇到运行时崩溃。
我赞成有一对一的外部课来测试你的可交付课程。执行测试的TestSimpleClass
之类的东西。这种方法有许多优点:
如果你真的想测试课程的内部,你可以随时让你的测试课成为你的可交付课程的朋友。它只是可交付类中的一行,您仍然不必运送测试类或库。