今年夏天,我开发了一个用纯c语言编写的嵌入式系统。这是我所在公司接管的一个现有项目。我已经非常习惯使用JUnit在Java中编写单元测试,但不知道为现有代码(需要重构)和添加到系统中的新代码编写单元测试的最佳方法是什么。
有什么项目可以让单元测试纯C代码像使用JUnit测试Java代码一样简单吗?任何特别适用于嵌入式开发(交叉编译到arm-linux平台)的见解都将非常感谢。
今年夏天,我开发了一个用纯c语言编写的嵌入式系统。这是我所在公司接管的一个现有项目。我已经非常习惯使用JUnit在Java中编写单元测试,但不知道为现有代码(需要重构)和添加到系统中的新代码编写单元测试的最佳方法是什么。
有什么项目可以让单元测试纯C代码像使用JUnit测试Java代码一样简单吗?任何特别适用于嵌入式开发(交叉编译到arm-linux平台)的见解都将非常感谢。
当前回答
Michael Feather的书《有效地使用遗留代码》介绍了很多专门用于C开发期间单元测试的技术。
有一些与依赖注入相关的技术是特定于C语言的,我在其他任何地方都没有见过。
其他回答
我们编写CHEAT(托管在GitHub上)是为了便于使用和移植。
它没有依赖关系,不需要安装或配置。 只需要一个头文件和一个测试用例。
#include <cheat.h>
CHEAT_TEST(mathematics_still_work,
cheat_assert(2 + 2 == 4);
cheat_assert_not(2 + 2 == 5);
)
测试编译成一个可执行文件,负责运行测试并报告测试结果。
$ gcc -I . tests.c
$ ./a.out
..
---
2 successful of 2 run
SUCCESS
它也有漂亮的颜色。
API完整性检查器- C/ c++库的测试框架:
An automatic generator of basic unit tests for a shared C/C++ library. It is able to generate reasonable (in most, but unfortunately not all, cases) input data for parameters and compose simple ("sanity" or "shallow"-quality) test cases for every function in the API through the analysis of declarations in header files. The quality of generated tests allows to check absence of critical errors in simple use cases. The tool is able to build and execute generated tests and detect crashes (segfaults), aborts, all kinds of emitted signals, non-zero program return code and program hanging.
例子:
fontconfig 2.8.0测试套件 FreeType 2.4.8的测试套件
Minunit是一个非常简单的单元测试框架。 我用它来单元测试c微控制器代码avr。
cmock网址:http://code.google.com/p/cmockery/
如果你还在寻找测试框架,CUnitWin32是Win32/NT平台的一个。
这解决了我在其他测试框架中遇到的一个基本问题。也就是说,全局/静态变量处于确定性状态,因为每个测试都是作为单独的进程执行的。