Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C+内部冗余测试功能的影响+;班 在C++类中设计函数时,我经常会考虑测试。因此,当我完成一个类的所有函数时,通常会在类中添加几个只用于测试目的的函数。以以下为例: class SimpleClass { public: int a; int b; void fun1(); void fun2(); void testIntermediateResult(); private: void _fun1(); void _fun2(); };_C++_Compiler Optimization - Fatal编程技术网

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根本不存在时,很难做到这一点是说安装。