今年夏天,我开发了一个用纯c语言编写的嵌入式系统。这是我所在公司接管的一个现有项目。我已经非常习惯使用JUnit在Java中编写单元测试,但不知道为现有代码(需要重构)和添加到系统中的新代码编写单元测试的最佳方法是什么。
有什么项目可以让单元测试纯C代码像使用JUnit测试Java代码一样简单吗?任何特别适用于嵌入式开发(交叉编译到arm-linux平台)的见解都将非常感谢。
今年夏天,我开发了一个用纯c语言编写的嵌入式系统。这是我所在公司接管的一个现有项目。我已经非常习惯使用JUnit在Java中编写单元测试,但不知道为现有代码(需要重构)和添加到系统中的新代码编写单元测试的最佳方法是什么。
有什么项目可以让单元测试纯C代码像使用JUnit测试Java代码一样简单吗?任何特别适用于嵌入式开发(交叉编译到arm-linux平台)的见解都将非常感谢。
当前回答
我将CxxTest用于嵌入式c/c++环境(主要是c++)。
我更喜欢CxxTest,因为它有一个perl/python脚本来构建测试运行器。在进行了一些设置之后(因为不需要编写测试运行程序,所以还会更小),它非常容易使用(包括示例和有用的文档)。大部分工作是设置代码访问的“硬件”,这样我就可以有效地进行单元/模块测试。在此之后,很容易添加新的单元测试用例。
如前所述,它是一个C/ c++单元测试框架。所以你需要一个c++编译器。
CxxTest用户指南 CxxTest维基
其他回答
在测试目标之前,我使用RCUNIT在PC上对嵌入式代码进行了一些单元测试。好的硬件接口抽象很重要,否则字节顺序和内存映射寄存器会害死你。
cmock是最近推出的一个项目,由一个非常简单的C库组成,用于编写单元测试。
C语言有一个优雅的单元测试框架,它支持模拟对象,叫做cmocka。它只需要标准的C库,适用于各种计算平台(包括嵌入式)和不同的编译器。
它还支持不同的消息输出格式,如Subunit、Test Anything Protocol和jUnit XML报告。
cmocka也可以在嵌入式平台上工作,也支持Windows。
一个简单的测试是这样的:
#include <stdarg.h>
#include <stddef.h>
#include <setjmp.h>
#include <cmocka.h>
/* A test case that does nothing and succeeds. */
static void null_test_success(void **state) {
(void) state; /* unused */
}
int main(void) {
const struct CMUnitTest tests[] = {
cmocka_unit_test(null_test_success),
};
return cmocka_run_group_tests(tests, NULL, NULL);
}
API有完整的文档,源代码中有几个示例。
要开始使用cmocka,您应该阅读LWN.net上的文章:在C中使用模拟对象进行单元测试
cmocka 1.0已于2015年2月发布。
如果您的目标是Win32平台或NT内核模式,您应该看看cfix。
cmock网址:http://code.google.com/p/cmockery/