Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.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函数实现单元测试?_C++_Unit Testing - Fatal编程技术网

C++ 如何为返回二进制数据的简单C函数实现单元测试?

C++ 如何为返回二进制数据的简单C函数实现单元测试?,c++,unit-testing,C++,Unit Testing,我想为一个函数实现一些非常简单的C/C++单元测试,该函数应该压缩或解压缩一些数据 主要输入是一个二进制块,输出也是一个二进制块。二进制块应该少于50字节,可能有5-6对 我正在寻找一个最好不需要第三方库的解决方案。如果需要,这个应该非常小/简单 “我正在寻找一种不需要第三方库的解决方案。” 只需编写单元测试函数,这很简单:创建一个函数,该函数将使用不同的参数调用待测试函数,并将结果与预期的输出进行比较。将指向该测试函数的函数指针添加到全局函数指针数组中,在该数组中存储所有测试函数,以便您可以按

我想为一个函数实现一些非常简单的C/C++单元测试,该函数应该压缩或解压缩一些数据

主要输入是一个二进制块,输出也是一个二进制块。二进制块应该少于50字节,可能有5-6对

我正在寻找一个最好不需要第三方库的解决方案。如果需要,这个应该非常小/简单

“我正在寻找一种不需要第三方库的解决方案。”


只需编写单元测试函数,这很简单:创建一个函数,该函数将使用不同的参数调用待测试函数,并将结果与预期的输出进行比较。将指向该测试函数的函数指针添加到全局函数指针数组中,在该数组中存储所有测试函数,以便您可以按需运行所有测试函数。

不知何故,您需要验证您的函数,我能想到的唯一解决方案是:

  • 使用一些第三方库(已知在实践中有效)
  • 使用一些您确切知道输出应该是什么样的数据序列

    • 我可以想到两种类型的单元测试。 1.检查输出是否正确。为此,您可以尝试使用已知输出的输入。在单元代码中,您可以将方法的输出与已知输出进行比较。
      2.仅检查回归。我在某种遗留代码库中使用了这些测试。在这里,您的功能以某种方式得到了验证(可能通过其他方式进行了测试)。但是,当有人对此代码进行一些更改时,您需要确保主输出没有损坏。为此,您可以在特定的构建中调用该方法,在该构建中,您可以确保函数工作正常,并将该输出捕获为基线。稍后,您可以编写一个单元测试驱动程序来调用该方法,并将输出与所有后续构建中的基线输出进行比较。但是,您需要记住,当有意修改函数以在以后修改输出时,要更新基线。

      我知道这是一个非常老的问题,但我正好带着同样的问题来到这里。
      我将假设第三方依赖关系是用于比较二进制数据的工具,而不是单元测试工具本身(我假设这是因为我的需求相同)

      我最后做的事情是这样的:

        char result_buffer[] = "“jJ";
        auto n               = memcmp(result_buffer, your_function(), sizeof(char) * 3);
      
      为了得到result_buffer的值,我实际上使用了调试器并从那里得到了该值。这样我可以确保它是正确的。

      在那之后,剩下的唯一要做的就是使用单元测试工具检查n是否为0

      除非您计划进行模糊测试,否则使用已知在实践中有效的第三方库仅对生成数据集有用(但这略有不同,因为结果通常不可复制)。不清楚引用的第三方库是否有助于实现单元测试或提供相同的功能(那就要和他们较量一下)你能说得准确吗?情不自禁:索林6666(恶魔语)!不再是了,现在我在恶魔之上了;)