我这个夏天参与开发了一款使用C语言编写的嵌入式系统。这是一项由我们公司接手的现有项目。我已经习惯了使用JUnit在Java中编写单元测试,但对于需要重构的现有代码以及添加到系统中的新代码,我不知道编写单元测试的最佳方法。
是否存在任何项目可以使像JUnit一样轻松地为C语言编写的代码进行单元测试?特别是针对嵌入式开发(交叉编译到arm-linux平台)的任何见解都将非常感激。
我这个夏天参与开发了一款使用C语言编写的嵌入式系统。这是一项由我们公司接手的现有项目。我已经习惯了使用JUnit在Java中编写单元测试,但对于需要重构的现有代码以及添加到系统中的新代码,我不知道编写单元测试的最佳方法。
是否存在任何项目可以使像JUnit一样轻松地为C语言编写的代码进行单元测试?特别是针对嵌入式开发(交叉编译到arm-linux平台)的任何见解都将非常感激。
首先,看这里:http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks#C
我们公司有一个由客户使用的C库。我们使用CxxTest(一个C++单元测试库)来测试代码。CppUnit也可以使用。如果你被困在C中,我建议使用RCUNIT(但CUnit也不错)。
API Sanity Checker 是一个用于 C/C++ 库的测试框架:
它是一个自动生成基本单元测试的工具,能够通过分析头文件中的声明为参数生成合理的(在大多数情况下)输入数据,并为 API 中的每个函数组成简单的(“sanity”或“shallow”质量)测试用例。
生成的测试用例的质量可以检查简单用例中是否存在关键错误。该工具能够构建和执行生成的测试,并检测崩溃(segfaults)、中止、所有类型的发射信号、非零程序返回代码和程序挂起。
示例:
LibU(http://koanlogic.com/libu)有一个单元测试模块,允许显式测试套件/用例依赖关系、测试隔离、并行执行和可定制的报告格式化程序(默认格式为xml和txt)。
该库采用BSD许可证,并包含许多其他有用的模块-网络、调试、常用数据结构、配置等-如果您需要在项目中使用它们...
我刚刚写了Libcut,因为我对现有的C语言单元测试库感到沮丧。它具有原始类型的自动字符串化功能(不需要test_eq_int、test_eq_long、test_eq_short等;只需要两个不同的集合来处理原始类型和字符串),并且只包含一个头文件。以下是一个简短的示例:
#include <libcut.h>
LIBCUT_TEST(test_abc) {
LIBCUT_TEST_EQ(1, 1);
LIBCUT_TEST_NE(1, 0);
LIBCUT_TEST_STREQ("abc", "abc");
LIBCUT_TEST_STRNE("abc", "def");
}
LIBCUT_MAIN(test_abc);
但它只能与C11一起使用。
如果你仍在寻找测试框架,CUnitWin32 是一个适用于Win32/NT平台的框架。
这解决了我在其他测试框架中遇到的一个根本性问题。也就是说,全局/静态变量处于确定状态,因为每个测试都作为单独的进程执行。