C+内部冗余测试功能的影响+;班 在C++类中设计函数时,我经常会考虑测试。因此,当我完成一个类的所有函数时,通常会在类中添加几个只用于测试目的的函数。以以下为例: class SimpleClass { public: int a; int b; void fun1(); void fun2(); void testIntermediateResult(); private: void _fun1(); void _fun2(); };
在此函数中,C+内部冗余测试功能的影响+;班 在C++类中设计函数时,我经常会考虑测试。因此,当我完成一个类的所有函数时,通常会在类中添加几个只用于测试目的的函数。以以下为例: class SimpleClass { public: int a; int b; void fun1(); void fun2(); void testIntermediateResult(); private: void _fun1(); void _fun2(); };,c++,compiler-optimization,C++,Compiler Optimization,在此函数中,testIntermediateResult仅用于测试目的。将函数留在类中是一种好的做法,还是应该这样做: class SimpleClass { public: int a; int b; void fun1(); void fun2(); #ifdef TESTING void testIntermediateResult(); #endif private:
testIntermediateResult
仅用于测试目的。将函数留在类中是一种好的做法,还是应该这样做:
class SimpleClass
{
public:
int a;
int b;
void fun1();
void fun2();
#ifdef TESTING
void testIntermediateResult();
#endif
private:
void _fun1();
void _fun2();
};
这里的原理是,当这个类已经完成测试,并将提供给客户机,然后将定义测试,这个函数将不在类内。因此,我的问题是:当类被提供给客户机时,真的需要删除测试函数吗?假设客户端不使用测试函数,在一个类中添加几个冗余测试函数会有什么影响?谢谢 我假设您的客户不会参与测试您移交的类。我不想将测试函数直接添加到类本身中,因为它们可能会破坏类的行为。至于客户机,我不想给他们一些带有测试功能的东西,因为:
- 没有必要——测试它不是他们的工作
- 他们可能会决定尝试使用它——谁知道接下来会发生什么
TestSimpleClass
。这种方法有许多优点:
如果您真的想测试类的内部结构,您可以让您的测试类成为可交付类的朋友。在可交付类中只需多出一行代码,您仍然不必发布测试类或库。我将其称为
测试的<代码>#如果NDEF测试
听起来像是“如果我们没有测试它”,这与您所描述的正好相反……更好的做法是设计不做太多工作的类,这样您就不必在其中放入任意的测试函数。如果您喜欢未定义的行为,这是一种很好的做法。如果编译一个源代码时定义了测试,而编译另一个源代码时未定义测试,则表示行为未定义。(当然,无论如何它都可能工作。但你永远不知道;如果我在编写编译器,它就不会编译。)我个人非常乐意保留你的API,如果没有其他原因,除非当客户端出现问题时,你可以连接一个测试夹具,在他们的环境中以发布位调用所述API。当API根本不存在时,很难做到这一点是说安装。