你如何将CMock/Unity与Automake整合?

问题描述:

这是我第一次在这里问一个问题,所以请让我知道,如果我可以改善我的问题..你如何将CMock/Unity与Automake整合?

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

例如,如果我测试功能test_me()测试中的源文件调用foo(),test.c的,然后模拟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。当你有嘲笑(例如Mockfoo,Mockbar,但不是baz)和具有不同automake规则,标志等的大型源代码树时,这会变得更加复杂。

此外,mocks的添加必须简单,因为mocks通常是我们的单元测试需要的。

一些背景:

我感兴趣的使用CMock/Unity到在代码重构或者新的代码被添加到一个大型C项目,我刚刚加入到案件增加的单元测试。

该项目目前使用Automake作为其构建工具,它在这里停留。

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

不久前发布了这个问题。我会为面临类似问题的其他人发布我的解决方案。

与CMock/Unity接口最可靠的方法是使用rake(基于Ruby的构建工具)。耙可以从你的Makefile.am中调用。可以创建目标来为指定的每个伪目标调用rake来构建单元测试。

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

+0

我同意,使用Ruby工具。这种基于rake的构建工具称为Ceedling。我已经开始使用它:http://www.electronvector.com/blog/try-embedded-test-driven-development-right-now-with-ceedling 没有理由你不能使用它只需运行测试即可。将Ceedling项目中的“vendor”文件夹放到您的项目中,并抓住project.yml和rakefile。rb文件。然后更改project.yml文件夹中的源代码和测试文件夹配置以匹配项目树。 – cherno 2015-12-10 18:33:20