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

时间:2012-02-13 12:33:35

标签: c++ unit-testing

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

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

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

4 个答案:

答案 0 :(得分:1)

  

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

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

答案 1 :(得分:1)

不知何故,您需要验证您的功能以及我能想到的唯一解决方案:

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

我知道这是一个非常老的问题,但是我碰巧遇到同样的问题。
我将假设第三方依赖项是用于比较二进制数据的工具,而不是单元测试工具本身(我假设这是因为我的要求相同)。

我最终要做的是这样的:

  char result_buffer[] = "“jJ";
  auto n               = memcmp(result_buffer, your_function(), sizeof(char) * 3);

为了获得result_buffer的值,我实际上与调试器一起从那里获取了该值。这样我可以确保它是正确的。
之后,剩下要做的就是用单元测试工具检查n是否为0。