今年夏天,我开发了一个用纯c语言编写的嵌入式系统。这是我所在公司接管的一个现有项目。我已经非常习惯使用JUnit在Java中编写单元测试,但不知道为现有代码(需要重构)和添加到系统中的新代码编写单元测试的最佳方法是什么。
有什么项目可以让单元测试纯C代码像使用JUnit测试Java代码一样简单吗?任何特别适用于嵌入式开发(交叉编译到arm-linux平台)的见解都将非常感谢。
今年夏天,我开发了一个用纯c语言编写的嵌入式系统。这是我所在公司接管的一个现有项目。我已经非常习惯使用JUnit在Java中编写单元测试,但不知道为现有代码(需要重构)和添加到系统中的新代码编写单元测试的最佳方法是什么。
有什么项目可以让单元测试纯C代码像使用JUnit测试Java代码一样简单吗?任何特别适用于嵌入式开发(交叉编译到arm-linux平台)的见解都将非常感谢。
当前回答
我目前正在使用CuTest单元测试框架:
http://cutest.sourceforge.net/
它是嵌入式系统的理想选择,因为它非常轻量级和简单。让它在目标平台和桌面上运行都没有问题。除了编写单元测试,所需要的是:
头文件包含在任何地方 你称之为最可爱的程序 一个额外的“C”文件 编译/链接到映像 一些简单的代码添加到主要到 设置并调用单元测试- I 只需要把它放在一个特殊的main()中 函数,如果 过程中定义UNITTEST 构建。
系统需要支持堆和一些stdio功能(不是所有的嵌入式系统都有)。但是代码非常简单,如果您的平台没有这些需求,您可能可以使用这些需求的替代方案。
通过明智地使用extern“C”{}块,它还可以很好地支持测试c++。
其他回答
谷歌拥有优秀的测试框架。https://github.com/google/googletest/blob/master/googletest/docs/primer.md
是的,据我所知,它将与普通C一起工作,即不需要c++功能(可能需要c++编译器,不确定)。
如果你还在寻找测试框架,CUnitWin32是Win32/NT平台的一个。
这解决了我在其他测试框架中遇到的一个基本问题。也就是说,全局/静态变量处于确定性状态,因为每个测试都是作为单独的进程执行的。
首先,看看这里:http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks#C
我的公司有一个客户使用的C库。我们使用CxxTest(一个c++单元测试库)来测试代码。CppUnit也可以工作。如果你被C卡住了,我推荐RCUNIT(但CUnit也很好)。
我目前正在使用CuTest单元测试框架:
http://cutest.sourceforge.net/
它是嵌入式系统的理想选择,因为它非常轻量级和简单。让它在目标平台和桌面上运行都没有问题。除了编写单元测试,所需要的是:
头文件包含在任何地方 你称之为最可爱的程序 一个额外的“C”文件 编译/链接到映像 一些简单的代码添加到主要到 设置并调用单元测试- I 只需要把它放在一个特殊的main()中 函数,如果 过程中定义UNITTEST 构建。
系统需要支持堆和一些stdio功能(不是所有的嵌入式系统都有)。但是代码非常简单,如果您的平台没有这些需求,您可能可以使用这些需求的替代方案。
通过明智地使用extern“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
它也有漂亮的颜色。