gpt4 book ai didi

c++ - C++ 类中冗余测试函数的影响

转载 作者:行者123 更新时间:2023-11-30 02:49:27 25 4
gpt4 key购买 nike

在 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 将被定义并且这个函数将不在类中。因此,我的问题是:当给客户上课时,真的需要去掉测试功能吗?假设客户端不会使用测试函数,那么在一个类中增加几个冗余的测试函数有什么作用呢?谢谢。

最佳答案

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

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

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

我希望有一对一的外部类(class)来测试您的可交付类(class)。类似于执行测试的 TestSimpleClass。这种方法有很多优点:

  1. 它完全独立于您的代码,没有内置到代码中,因此您不会使代码膨胀或导致任何潜在问题。
  2. 它将按照客户看到的方式测试您的类接口(interface)(即黑盒测试)
  3. 因为它是独立的,所以您不必将它提供给您的客户 - 他们永远不必知道。

如果你真的想测试类的内部结构,你总是可以让你的测试类成为你的可交付类的 friend 。它只是交付类中的额外一行,您仍然不必交付测试类或库。

关于c++ - C++ 类中冗余测试函数的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21167901/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com