单元测试 - 如何去做?

时间:2009-11-25 23:27:33

标签: c unit-testing testing

我想对我的程序(在C中)进行单元测试,因为我知道这样做的好处,因为它显示了问题所在。

我也喜欢黑盒测试,因为它告诉我程序是否有效(至少是测试)。

目前,我正在使用自动测试(Autoconf附带),以便不添加依赖项。

此时,我不介意使用更好的框架,但问题是我不想使用不同的框架进行黑盒和单元测试。是否可以从单元测试框架运行黑盒测试?我真正想要的是良好的日志输出,确切地说出了什么问题以及在哪里。

我的另一个选择是使用自动测试进行单元测试。问题是没有框架。我编写了一个小的“测试驱动程序”,它接受要测试的函数的名称和传递给函数的参数,并调用该函数。问题是我不确定断言之间使用什么边界并输出函数的返回值(用于记录目的,因为我喜欢Autotest会给我一个差异)。由于大多数函数返回列表,因此使用具有预期输出的diff(使用自动测试的expout)准备更快。

2 个答案:

答案 0 :(得分:2)

  

是否有可能运行   blackbox测试单元测试   框架?

是的,您可以从单元测试中调用带有system()的自动测试,然后对返回的值进行断言。

但我不建议这样做,因为单位测试经常执行,它们应该非常快,即以秒为单位测量,而不是几分钟。

单元测试和集成测试(你称之为黑盒测试)有不同的用途:单元测试验证代码中的单元(无论这意味着,功能还是功能集群)按预期工作测试,而集成测试覆盖程序端到端,验证它作为一个整体。

因此,通常在代码中的每次更改之后运行单元测试,特别是如果应用TDD,而在添加功能时执行集成测试。

我宁愿有一个典型的单元测试程序,带有断言,还有一个集成套件,除了你的黑盒测试之外还会调用单元测试。

  

问题是我不确定断言和断言之间使用什么边界   输出函数的返回值(用于记录目的,因为   我喜欢Autotest会给我一个差异。

使用断言无需输出:预期值和实际值相等且没有任何反应,或者它们不同,UT框架会输出错误消息(预期为X,实际为Y)。这是一个让计算机完成测试工作的人。

使用日志记录输出diff,仍然需要手动(可视)检查diff的结果(例如:列表中是否缺少一个项目或一个额外的项目......)。

  

由于大多数函数返回列表,因此使用diff进行准备会更快   预期输出(使用自动测试的expout)。

您可能希望编写一个使用断言来比较列表的函数。

答案 1 :(得分:0)

您可能希望使用CMake附带的CTest,这是一个包含许多后端的跨平台制作系统:http://www.cmake.org/Wiki/CMake#CTest

PS:CMake也比autotools强大得多。