Cmocka 2.0 发布:C语言单元测试框架迈入C99新时代

Cmocka 单元测试框架发布了2.0版本,核心是全面转向C99标准,引入了更安全的整数类型和布尔类型,并增加了大量类型特定的断言宏与mock宏,显著增强了代码的表达力、类型安全性和跨平台可移植性。

Cmocka 2.0 发布

[发表于 2025年12月4日 作者 jzb]

Andreas Schneider 宣布了 C 语言单元测试框架 cmocka 的 2.0 版本。

此版本代表了一次重大的现代化努力,使 cmocka 坚定地迈入了“现代”C99时代,同时保持了用户所期待的简洁性和易用性。

cmocka 2.0 中最显著的变化之一是迁移到了 C99 标准整数类型。原有的 LargestIntegralType 类型定义已被 stdint.h 中的 intmax_tuintmax_t 所取代,这提供了更好的类型安全性和跨不同平台的可移植性。此外,我们还在适当的地方采用了 bool 类型,使代码更具表达力和自文档性。

使用 intmax_tuintmax_t 也使得能够打印出更好的错误信息。因此,你现在可以找到例如 assert_int_equalassert_uint_equal 这样的断言。

cmocka 2.0 引入了一套全面的类型特定断言宏,包括 assert_uint_equal()assert_float_equal() 以及增强的指针断言。模拟系统也通过类型特定的宏(如 will_return_int()will_return_float())得到了显著改进。参数检查等方面也做了同样的改进。

LWN 曾在2013年该项目发展早期对其进行过报道。完整的 cmocka 2.0 新特性、增强和错误修复列表请参阅更新日志。

intmax_t

[由 magfr (订阅者, #16052) 发表于 2025年12月4日 15:25 UTC (周四)]

考虑到 intmax_t 众所周知的诸多问题(主要是它仍然是 64 位的,因为改变它会引发 ABI 中断,尽管例如 x86_64 在过去十年中已经支持各种 128 位整数类型),他们对于更大类型的策略是什么?

关于 intmax_t 的普遍共识似乎是“不要使用它”。

他们还谈到了 C99,他们对 C26 及其新特性(例如 _BitInt)有什么规划吗?

intmax_t

[由 wahern (订阅者, #37304) 发表于 2025年12月4日 23:06 UTC (周四)]

事实上,C 标准委员会多年来一直在计划尽可能多地将其弃用并从标准中移除。在某种程度上,这激发了很多活动,不仅是为了解决 intmax_t 最初旨在解决的问题,也是为了提供语言内特性,从而以最小的破坏性来超越 intmax_t,例如符号别名和版本控制。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计