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

How to implement unit test for a simple C function that returns binary data?

本文关键字:数据 简单 单元测试 函数 二进制 返回 何实现 实现      更新时间:2023-10-16

我想为一个应该压缩或解压缩一些数据的函数实现一些非常简单的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。