如何向已建立的 (autotools) C 项目添加单元测试

发布于 2024-09-06 15:54:25 字数 180 浏览 8 评论 0原文

我有一个带有一些新功能的 openssh 分支,并且想要编写一些单元测试以确保它们在构建时工作。嫁接检查openssh的autotools配置很困难(因为我不太了解autotools)

有没有更容易使用的C单元测试框架?一种与自动工具关系不太密切的工具? 是否有更好的方法将 Check 添加到该项目而不从根本上更改其构建文件?

I have a fork of openssh with some new features and want to write some unit tests to make sure they work at build. Grafting Check into openssh's autotools configuration is diffacult (because I don't really understand autotools)

Is there an easier to use C unit test framework? One less closely tied to autotools?
How about a better way of going about adding Check to this project with out radically changing its build files?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

将军与妓 2024-09-13 15:54:25

如果目标是将这些新功能集成到主分支中,那么放弃自动工具可能不是一个好主意。这个SO问题指向一些可能有用的自动工具教程。

另外,还有几个可用于 C 的单元框架:最臭名昭著的是 Cunit、Check、minunit、CMockery,请参阅 这个问题此列表

It might not be a good idea to move away from autotools if the objective is to integrate those new features in the main branch. This SO question is pointing to several tutorials for autotools that could be helpful.

Otherwise, there are several unit framework available for C: the most notorious are Cunit, Check, minunit, CMockery, refer to this question or this list.

丢了幸福的猪 2024-09-13 15:54:25

通过创建单独的构建,可以最轻松地完成互连代码的单元测试。这允许使用 Mock 对象在链接时替换其他编译单元,并免费使用 C 预处理器:

  • 不提供单元测试代码(代码膨胀,客户会用它做什么?),因此使用单独的 build( s) 首先。
  • 功能A可以为某些单元测试提供模拟功能B1和C1,并为其他测试提供不同的模拟功能B2、B3、B4和C2(到C7)。
  • 功能B可以被提供模拟功能A1和C2。如果 Function A 和 Mock function A1 (都具有相同的名称)都在同一个版本中,那就有点尴尬了。
  • 使用 C 预处理器可以将操作映射到完全不同的行为。

Grenning 有一本关于嵌入式 C 测试驱动开发的好书。

Unit testing of interlinked code is most easily accomplished by creating separate builds. This allows e.g. link-time replacement of other compilation units with Mock objects, and free use of the C preprocessor:

  • Unit test code is not shipped (bloats the code, and what would a customer do with it?), so use separate build(s) to start with.
  • Function A may be provided Mock functions B1 and C1 for some unit tests, and different Mock functions B2, B3, B4 and C2 (through C7) for other tests.
  • Function B may be provided Mock functions A1 and C2. A bit awkward if both Function A and Mock function A1 (all with the same name) are in the same build.
  • Operations may be mapped to entirely different behavior using the C preprocessor.

There's a good book on Test Driven Development for Embedded C by Grenning.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文