冗余测试函数在C ++类中的作用

时间:2014-01-16 16:52:05

标签: c++ compiler-optimization

在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并且该函数将不在该类中。因此,我的问题是:当将类提供给客户端时,是否真的需要删除测试函数?假设客户端不使用测试功能,在类中添加多个冗余测试功能有什么影响?谢谢。

1 个答案:

答案 0 :(得分:3)

我假设您的客户不会参与测试您正在移交的课程。我不想将测试函数直接添加到类本身中,因为它们可能会破坏类的行为。至于客户端,我宁愿不给它们带有测试功能的东西,因为:

  • 没有必要 - 测试它不是他们的工作。
  • 他们可以决定尝试使用它 - 谁知道那会发生什么?

如果他们没有看到它,那就更简单了。至于使用预处理器,这可能会遇到问题,特别是如果你需要以同样的方式保护属性。如果错过了其中任何一个,或者客户端在构建过程中重新定义了宏,那么由于类大小不匹配等原因,您可能会遇到运行时崩溃。

我赞成有一对一的外部课来测试你的可交付课程。执行测试的TestSimpleClass之类的东西。这种方法有许多优点:

  1. 它完全独立于您的代码,而不是内置于代码中,因此您不会使代码膨胀或导致任何潜在问题。
  2. 它将以客户端看到它的方式测试您的类界面(即黑盒测试)
  3. 因为它是独立的,所以你不必将它交给你的客户 - 他们永远不必了解它。
  4. 如果你真的想测试课程的内部,你可以随时让你的测试课成为你的可交付课程的朋友。它只是可交付类中的一行,您仍然不必运送测试类或库。