【问题标题】:How do you integrate CMock/Unity with Automake?如何将 CMock/Unity 与 Automake 集成?
【发布时间】:2014-09-26 20:09:52
【问题描述】:

这是我第一次在这里提问,如果我能改进我的问题,请告诉我..

我正在寻找有关如何干净地构建单元测试的指导,这些单元测试需要用 CMock 生成的源文件的模拟版本替换源文件。这是必需的,因为 CMock 要求使用模拟的单元测试代码与模拟源链接而不是原始源。

例如,如果我在测试源文件 test.c 中测试调用 foo() 的函数 test_me(),那么要模拟 foo(),我将不得不编译 test_test_me: test_me.c, Mockfoo.c, and test.c.

test_me() 通常编译为test_me: test_me.c and foo.c

Mockfoo.c 是使用 CMock 使用 foo.h 提供的 Ruby 脚本生成的。

如您所见,foo.c 必须替换为 Mockfoo.c 才能创建测试程序 test_test_me。需要 Mockfoo.c 以便 test_test_me 可以链接到 foo 的模拟调用,而不是原始的 foo 调用。当依赖数量增加时,替换源变得困难。

例如,如果 test_me 使用库 libfoo.a 中的 foo、bar 和 baz,它由 foo.o、bar.o 和 baz.o 组成,并且我只想模拟对 foo 的调用,那么我需要使用编译单元 Mockfoo.o、bar.o 和 baz.o 构建 libfoo.a,然后链接到使用模拟 foo 调用的我的 test.o。当你有 mock 的排列(例如 Mockfoo、Mockbar,但不是 baz)和具有不同 automake 规则、标志等的大型源树时,这会变得更加复杂。

此外,模拟的添加必须简单,因为我们的单元测试经常需要模拟。

一些上下文:

我有兴趣使用CMock/Unity 来添加单元测试,以防重构代码或将新代码添加到我刚刚加入的大型 C 项目中。

该项目目前使用 Automake 作为其构建工具,并且将继续使用。

我是 Automake 的新手。我熟悉 SCons 和 CMock。

【问题讨论】:

    标签: c unit-testing autotools automake cmock


    【解决方案1】:

    这个问题是很久以前发布的。我会为遇到类似问题的其他人发布我的解决方案。

    与 CMock/Unity 交互的最可靠方法是使用基于 Ruby 的构建工具 rake。 rake 可以从你的 Makefile.am 中调用。可以创建目标来为每个指定的虚假目标调用 rake,以构建您的单元测试。

    在我的特殊情况下,由于构建环境的限制,我无法使用 rake。相反,我选择使用 cmocka,它具有 CMock/Unity 中提供的功能,并且很容易与 automake 集成。

    【讨论】:

    • 我同意,使用 Ruby 工具。基于 rake 的构建工具称为 Ceedling。我有开始使用它的演练:electronvector.com/blog/… 你没有理由不能在 Automake 旁边使用它来运行测试。将 Ceedling 项目中的“vendor”文件夹拖放到您的项目中,同时获取 project.yml 和 rakefile.rb 文件。然后更改 project.yml 文件夹中的源和测试文件夹配置以匹配您的项目树。
    猜你喜欢
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    • 1970-01-01
    • 2022-10-25
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    • 2020-12-30
    相关资源
    最近更新 更多