2014-09-26 67 views
0

這是我第一次在這裏問一個問題,所以請讓我知道,如果我可以改善我的問題..你如何將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。

回答

1

不久前發佈了這個問題。我會爲面臨類似問題的其他人發佈我的解決方案。

與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