2009-11-25 46 views
8

我想单元测试我的程序(使用C语言),因为我知道这样做的好处,因为它显示了问题出在哪里。单元测试 - 如何去做?

我也喜欢黑盒测试,因为它告诉我程序是否工作(至少对于测试)。

目前,我正在使用Autotest(Autoconf自带)为了不添加依赖项。

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

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

+0

你的程序用什么语言编写? – Mathias 2009-11-25 23:35:35

+0

呃,我不能相信我忘了那个。它以C编写。 – alternative 2009-11-25 23:38:55

+0

如果你会考虑其他框架,维基百科有一个C的单元测试框架列表:http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks#C还有一个叫做autounit的产品,它应该与autoconf很好地结合,目前是beta版。 http://autounit.tigris.org/ http://autounit.tigris.org/files/documents/187/171/autounit.html – 2009-11-26 18:42:52

回答

2

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

是的,你可以用单元测试调用自动测试system(),然后在返回的值上声明。

但我不会推荐这么做,因为单元测试经常执行,它们应该非常快,即以秒为单位而不是以分钟测量。

单元测试和集成测试(你叫黑箱测试)用于不同的用途:单元测试验证的单位代码(无论这意味着,功能或功能群)的工作原理是测试符合预期,而集成测试涵盖了端到端的程序,并将其作为一个整体进行验证。因此,通常在代码中每进行一些更改后都会运行单元测试,尤其是在应用TDD时,而在添加功能时执行集成测试时。

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

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

断言没有任何输出:或者期望值和实际值相等,没有任何反应,或者它们不同并且UT框架打印出错误消息(预期为X,实际为Y)。这是让电脑做测试的工作。

对于日志输出差异,仍然需要手动(直观地)检查差异结果(例如:是否有一个项目在列表中丢失或一个额外项目...)。

由于大多数函数返回列表,它是更快使用diff 与预期输出(expout使用自动测试),以制备。

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

0

您可能需要使用CTEST,附带CMake的,跨平台使系统与许多后端:http://www.cmake.org/Wiki/CMake#CTest

PS:CMake的比自动工具更强大了。

+0

我没有使用CMake。 – alternative 2009-11-26 20:48:23

+0

你可能会考虑一个开关,直到它不晚:-) – Flavius 2009-11-28 23:03:53