你用啥来单元测试C代码? [复制]

Posted

技术标签:

【中文标题】你用啥来单元测试C代码? [复制]【英文标题】:What do you use to unit test C code? [duplicate]你用什么来单元测试C代码? [复制] 【发布时间】:2010-10-04 08:48:40 【问题描述】:

我是一名专业的网络开发人员,因此我习惯于使用非常高级的脚本语言和测试工具。最近,我个人更多地使用 C 语言工作,并为基于 unix 的系统编写了许多 C 程序来完成各种任务。

但是,我仍然没有很好地对这段代码进行单元测试,我想知道 C 程序员使用什么工具来创建自动化测试来验证代码。

【问题讨论】:

另请参阅此问题:***.com/questions/65820/…>。 这是我一直在寻找的问题,但搜索并没有真正找到它。谢谢! 【参考方案1】:

我是一名开发人员,我更喜欢使用CMocka 工具为 C 语言提供 UnitTesting。 它是基于 GTest(主要是 C++ 单元测试)的简单工具,而且非常容易理解。 前段时间我研究了最好和最简单的测试工具,并决定这样做。

经过一段时间的工作,我真的很有信心。使用预处理器指令

#define MyFunction(iEntry) mock_MyFunction(iEntry)

你也可以切断你想要模拟的任何函数(甚至是基本的窗口函数,如 sizeof()、malloc() 等)。

在这一步之后,您只需创建模拟函数 (mock_MyFunction(iEntry)),将它们包含到您的项目中并模拟它们的行为。 首选方法是在调用它们应该返回之前设置它们一些值( will_return_always(mock_MyFunction, 5) )。而当这个函数被调用时,它总是返回值 5。

您也可以完全避免使用 C++ 语言并继续使用纯 C 语言。 不要知道CMocka的简单索引站点。您必须深入了解该站点和工具 API 才能找到您需要的东西.. :) 还可以查看this 获取使用 CMocka 的小教程...

我希望这会有所帮助,祝你有美好的一天.. :-)

【讨论】:

【参考方案2】:

考虑使用CppUTest。它是用 C++ 编写的,但隐藏了 C++,以便 C 程序员可以忽略 C++。

Unity 是一个很好的纯 C 测试工具。它使用 ruby​​ 生成测试运行器。

我会远离 CppUnit。它需要 C++ 知识,并且必须单独安装每个测试。

詹姆斯

【讨论】:

【参考方案3】:

如果您只想要一个快速的'n'dirty 测试机制,请查看assert 宏,它是 ANSI C 的一部分。

【讨论】:

哦,嘿,printf 也很有用! :P【参考方案4】:

CUtest。它真的很整洁。小,不依赖生成器语言,速度快...有什么不喜欢的?

【讨论】:

【参考方案5】:

我曾经有过这个问题并发现了CUnit。我只将它用于一个小项目,但看起来还不错。不像我习惯的 JUnit 或 NUnit 那样方便!对于 C++ 项目,我使用 cppunit,效果很好。

【讨论】:

【参考方案6】:

您是在严格测试 C 代码,还是可以混入一些 C++?如果 C++ 没问题,cppunit 可能值得一试。如果您正在测试一个库,您可以简单地将您的库链接到您的单元测试应用程序。如果您正在测试一个应用程序,您可能必须创建一个库,然后将其链接到您的应用程序和单元测试应用程序。

【讨论】:

以上是关于你用啥来单元测试C代码? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

用啥来代替 JavaScript 中的类? [复制]

爱心代码编程用啥软件

看大神教你正确理解单元测试,不容错过!

JS 单元测试无需将整个 HTML 复制到单元测试中?

做软件的自动化测试一般用啥工具?和黑盒测试工具一样么?用loadrunner怎么样?

使用本机单元测试项目在 Visual Studio 2017 中对 C 代码进行单元测试