单元测试 - 如何去做?

alt*_*ive 8 c testing unit-testing

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

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

目前,我正在使用Autotest(随Autoconf一起提供)以便不添加依赖项.

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

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

phi*_*ant 2

是否可以从单元测试框架运行黑盒测试?

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

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

单元测试和集成测试(您称为黑盒测试)有不同的目的:单元测试验证代码中的单元(无论这意味着什么,函数或函数集群)是否按测试预期工作,而集成测试涵盖程序结束- 到最后,从整体上验证它。

因此,通常在代码中每隔几次更改后就会运行单元测试,特别是在应用 TDD 的情况下,而集成测试则在添加功能时执行。

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

问题是我不确定断言和输出函数的返回值之间使用什么边界(出于日志记录的目的,因为我喜欢自动测试如何给我一个差异)。

对于断言,没有任何内容可输出:要么预期值和实际值相等并且没有任何反应,要么它们不同并且 UT 框架打印出错误消息(预期值是 X,实际值是 Y)。那就是让计算机来做测试的工作。

通过记录输出差异,人们仍然需要手动(视觉)检查差异的结果(例如:列表中是否缺少一项或一项额外的项目......)。

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

您可能想要编写一个使用断言比较列表的函数。