单元测试C代码[关闭]

关闭。此问题不符合堆栈溢出准则。它目前不接受答案。

<hr class=“my12大纲无baw0 bb bc-POWER-400”/

想改进此问题吗?更新问题,使其成为堆栈溢出的主题。

已于6年前关闭

上个月,社区审查了是否重新打开此问题,并将其关闭:

原始关闭原因未解决

改进这个问题

今年夏天,我在一个用C语言编写的嵌入式系统上工作。这是一个我工作的公司已经接管的现有项目。我已经非常习惯于使用JUnit用Java编写单元测试,但对于为现有代码编写单元测试的最佳方法(需要重构)感到困惑以及添加到系统中的新代码

有没有什么项目可以让纯C代码的单元测试像使用JUnit进行Java代码的单元测试一样简单?如果有任何专门应用于嵌入式开发(交叉编译到arm linux平台)的见解,我们将不胜感激

检查C中的一个单元测试框架;可以在此处找到C中的单元测试框架列表,如下所示。根据您的运行时有多少标准库函数,您可能无法使用其中的一个

AceUnit

ACEUT(高级C和嵌入式单元)自称是一个舒适的C代码单元测试框架。它试图模仿JUnit 4.x,并包含类似反射的功能。AceUnit可用于资源约束环境,例如嵌入式软件开发,重要的是,它在无法包含单个标准头文件和无法调用singl的环境中运行良好来自ANSI/ISO C库的e标准C函数。它也有一个Windows端口。它不使用分叉来捕获信号,尽管作者表示有兴趣添加这样的功能。请参阅AceUnit主页

GNU自动单元

与Check大致相同,包括在单独的地址空间中运行单元测试(事实上,Check的原始作者借用了GNU Autounit的思想).GNU Autounit广泛使用GLib,这意味着链接等需要特殊选项,但这对您来说可能不是什么大问题,特别是如果您已经在使用GTK或GLib。请参阅GNU Autounit主页

库尼特

还使用GLib,但不使用fork来保护单元测试的地址空间

库尼特

标准C,有Win32 GUI实现计划。目前不分叉或以其他方式保护单元测试的地址空间。在早期开发中。请参阅CUnit主页

可爱的

一个简单的框架,只有一个.c和一个.h文件,你可以把它们放到你的源代码树中

CppUnit

CppUnit的C++单元测试框架,也可以用它来测试C代码。它是稳定的、积极开发的,并且有一个GUI接口。C++不使用C的主要原因是它很大,其次你必须在C++中编写测试,这意味着你需要一个C++编译器。如果这些听起来不像是关注的,那就是D。非常值得考虑,以及其他C++单元测试框架。参见CPPUngEngut.E/P>

埃姆布尼特

embUnit(嵌入式单元)是嵌入式系统的另一个单元测试框架。这个框架似乎被AceUnit.Embedded Unit主页所取代

细节

一组最小的宏,就是这样!重点是展示单元测试代码有多容易。请参阅MinUnit主页

安藤先生的CUnit

这是一个相当新的CUnit实现,显然仍处于早期开发阶段。请参见安藤先生主页上的CUnit

此列表上次更新是在2008年3月。

更多框架:

科摩卡

CMocka是一个支持模拟对象的C测试框架。它易于使用和设置

请参见CMocka主页

标准

Criteria是一个跨平台的C单元测试框架,支持自动测试注册、参数化测试、理论,并可以输出多种格式,包括TAP和JUnit XML。每个测试都在自己的进程中运行,因此可以在需要时报告或测试信号和崩溃

有关更多信息,请参见标准主页

HWUT

HWUT是一个非常支持C的通用单元测试工具。它可以帮助创建Makefiles,生成以最小的“迭代表”编码的大量测试用例,遍历状态机,生成C-stub等等。一般的方法非常独特:判断基于“好标准输出/坏标准输出”。不过,比较函数是灵活的在美国,任何类型的脚本都可以用于检查。它可以应用于任何能够产生标准输出的语言

请参见HWUT主页

绿色

一个现代的、可移植的、跨语言的单元测试和模拟框架,C++和C++提供了一个可选的BDD符号,一个模拟库,它可以在一个进程中运行(调试更容易)。一个自动发现测试函数的测试运行器是可用的。但是你可以用编程方式创建自己。

CGreen手册中解释了所有这些特性(以及更多)

Wikipedia在单元测试框架列表下给出了C单元测试框架的详细列表:C

发表评论