我想对我的程序(在C中)进行单元测试,因为我知道这样做的好处,因为它显示了问题所在。
我也喜欢黑盒测试,因为它告诉我程序是否有效(至少是测试)。
目前,我正在使用自动测试(Autoconf附带),以便不添加依赖项。
此时,我不介意使用更好的框架,但问题是我不想使用不同的框架进行黑盒和单元测试。是否可以从单元测试框架运行黑盒测试?我真正想要的是良好的日志输出,确切地说出了什么问题以及在哪里。
我的另一个选择是使用自动测试进行单元测试。问题是没有框架。我编写了一个小的“测试驱动程序”,它接受要测试的函数的名称和传递给函数的参数,并调用该函数。问题是我不确定断言之间使用什么边界并输出函数的返回值(用于记录目的,因为我喜欢Autotest会给我一个差异)。由于大多数函数返回列表,因此使用具有预期输出的diff(使用自动测试的expout)准备更快。
答案 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强大得多。