今年夏天我研究了一个用纯 C 语言编写的嵌入式系统。这是我工作的公司接管的一个现有项目。我已经非常习惯于使用 JUnit 在 Java 中编写单元测试,但是对于为现有代码(需要重构)以及添加到系统的新代码编写单元测试的最佳方法感到茫然。
是否有任何项目可以使单元测试纯 C 代码像使用 JUnit 单元测试 Java 代码一样简单?任何特别适用于嵌入式开发(交叉编译到 arm-linux 平台)的见解将不胜感激。
C 中的一个单元测试框架是Check;可以在此处找到 C 中的单元测试框架列表,并在下面复制。根据您的运行时有多少标准库函数,您可能会或不能使用其中之一。
王牌单位 AceUnit(高级 C 和嵌入式单元)自称是一个舒适的 C 代码单元测试框架。它试图模仿 JUnit 4.x 并包含类似反射的功能。AceUnit 可用于资源受限的环境,例如嵌入式软件开发,重要的是它在不能包含单个标准头文件并且不能从 ANSI/ISO C 库调用单个标准 C 函数的环境中运行良好。它还有一个 Windows 端口。它不使用分叉来捕获信号,尽管作者表示有兴趣添加这样的功能。请参阅AceUnit 主页。 GNU 自动单元 与 Check 大同小异,包括分叉以在单独的地址空间中运行单元测试(事实上,Check 的原作者借鉴了 GNU Autounit 的想法)。GNU Autounit 广泛使用 GLib,这意味着链接等需要特殊选项,但这对您来说可能不是什么大问题,特别是如果您已经在使用 GTK 或 GLib。请参阅GNU Autounit 主页。 cUnit 也使用 GLib,但不分叉以保护单元测试的地址空间。 单元 标准 C,计划实现 Win32 GUI。当前不分叉或以其他方式保护单元测试的地址空间。在早期发展中。请参阅CUnit 主页。 酷测 一个简单的框架,只有一个 .c 和一个 .h 文件,您可以放入源代码树。请参阅CutTest 主页。 CppUnit 首屈一指的 C 单元测试框架;您还可以使用它来测试 C 代码。它稳定,积极开发,并具有 GUI 界面。不使用 CppUnit for C 的主要原因首先是它很大,其次你必须用 C 编写测试,这意味着你需要一个 C 编译器。如果这些听起来不像问题,那么绝对值得考虑,以及其他 C 单元测试框架。请参阅CppUnit 主页。 embUnit embUnit(Embedded Unit)是另一个嵌入式系统的单元测试框架。这个似乎已被 AceUnit 取代。嵌入式单元主页。 最小单位 一组最小的宏,那就是它!重点是展示对代码进行单元测试是多么容易。请参阅MinUnit 主页。 安藤先生的CUnit 一个相当新的 CUnit 实现,显然仍处于早期开发阶段。请参阅安藤先生主页的 CUnit。 该列表最后一次更新是在 2008 年 3 月。
AceUnit(高级 C 和嵌入式单元)自称是一个舒适的 C 代码单元测试框架。它试图模仿 JUnit 4.x 并包含类似反射的功能。AceUnit 可用于资源受限的环境,例如嵌入式软件开发,重要的是它在不能包含单个标准头文件并且不能从 ANSI/ISO C 库调用单个标准 C 函数的环境中运行良好。它还有一个 Windows 端口。它不使用分叉来捕获信号,尽管作者表示有兴趣添加这样的功能。请参阅AceUnit 主页。
与 Check 大同小异,包括分叉以在单独的地址空间中运行单元测试(事实上,Check 的原作者借鉴了 GNU Autounit 的想法)。GNU Autounit 广泛使用 GLib,这意味着链接等需要特殊选项,但这对您来说可能不是什么大问题,特别是如果您已经在使用 GTK 或 GLib。请参阅GNU Autounit 主页。
也使用 GLib,但不分叉以保护单元测试的地址空间。
标准 C,计划实现 Win32 GUI。当前不分叉或以其他方式保护单元测试的地址空间。在早期发展中。请参阅CUnit 主页。
一个简单的框架,只有一个 .c 和一个 .h 文件,您可以放入源代码树。请参阅CutTest 主页。
首屈一指的 C 单元测试框架;您还可以使用它来测试 C 代码。它稳定,积极开发,并具有 GUI 界面。不使用 CppUnit for C 的主要原因首先是它很大,其次你必须用 C 编写测试,这意味着你需要一个 C 编译器。如果这些听起来不像问题,那么绝对值得考虑,以及其他 C 单元测试框架。请参阅CppUnit 主页。
embUnit(Embedded Unit)是另一个嵌入式系统的单元测试框架。这个似乎已被 AceUnit 取代。嵌入式单元主页。
一组最小的宏,那就是它!重点是展示对代码进行单元测试是多么容易。请参阅MinUnit 主页。
一个相当新的 CUnit 实现,显然仍处于早期开发阶段。请参阅安藤先生主页的 CUnit。
该列表最后一次更新是在 2008 年 3 月。
CMocka 是一个支持模拟对象的 C 测试框架。它易于使用和设置。
请参阅CMocka 主页。
Criterion 是一个跨平台的 C 单元测试框架,支持自动测试注册、参数化测试、理论,并且可以输出多种格式,包括 TAP 和 JUnit XML。每个测试都在自己的进程中运行,因此可以根据需要报告或测试信号和崩溃。
有关详细信息,请参阅标准主页。
HWUT 是一个通用的单元测试工具,对 C 有很好的支持。它可以帮助创建 Makefile,生成以最小“迭代表”编码的大量测试用例,遍历状态机,生成 C-stub 等等。一般方法非常独特:判断基于“好标准输出/坏标准输出”。但是,比较功能是灵活的。因此,任何类型的脚本都可以用于检查。它可以应用于任何可以产生标准输出的语言。
请参阅HWUT 主页。
用于 C 和 C++ 的现代、可移植、跨语言单元测试和模拟框架。它提供了一个可选的 BDD 表示法、一个模拟库以及在单个进程中运行它的能力(使调试更容易)。可以使用自动发现测试功能的测试运行器。但是您可以通过编程方式创建自己的。
所有这些功能(以及更多)都在CGreen 手册中进行了解释。
维基百科在单元测试框架列表下给出了 C 单元测试框架的详细列表:C