2012-03-19 106 views
1

讓我首先說我不是C開發人員,而且我對編寫真實世界C代碼知之甚少。我一直在做一些研究,以找到一個xUnit框架,我可以用它來編寫C代碼的測試,並根據我發現的結果,似乎Unity是我想要的。這似乎很簡單,但我真的不知道在從Unity網站下載zip文件後該怎麼辦。它似乎沒有正常的配置/ make/make安裝,如果是這樣,我不知道這是我應該用什麼。但是,它確實帶有一些rake任務,但沒有一個似乎是任何「安裝」任務。作爲最後的手段,我試圖用我的代碼複製3個源文件(我真的希望這不是正確的做法),但是當我嘗試使用gcc編譯我的c文件時出現錯誤,但是我認爲這應該工作。這裏是我的設置:如何使用「unity」在Mac(Lion)上單元測試C代碼?

src/ 
    mycode.c 
    unity.c 
    unity.h 
    unity_internals.h 

這裏是mycode.c中

/* mycode.c */ 
#include "unity.h" 

void test_sample(void) 
{ 
    TEST_ASSERT_EQUAL_INT(0, 0); 
} 

源當我運行gcc mycode.c我得到:

Undefined symbols for architecture x86_64: 
    "_main", referenced from: 
     start in crt1.10.6.o 
    "_UnityAssertEqualNumber", referenced from: 
     _test_sample in ccyHByv6.o 
ld: symbol(s) not found for architecture x86_64 
collect2: ld returned 1 exit status 

(我得到當類似的錯誤我嘗試用gcc編譯unity.c)。我以爲是指附帶的團結,需要不同的編譯器比我有一個代碼是:

i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.9.00) 

或者,也許團結就是不能在64位處理器兼容......(我上運行帶有2.4 GHz Intel Core 2 Duo處理器的Mac OS 10.7.3 - 另一件可能或可能不會相關的事情是我有XCode版本4.3(4E109)以及用於XCode的命令行工具)在這一點上,我是隻是抓着吸管,而我正在頭頂。

我的問題是,通過採用Unity等第三方C庫並將其提供給我的C代碼的正確過程是什麼?我是否需要安裝Python或Ruby之類的東西,或者像Java或其他東西一樣在我的路徑中添加內容?不應該把統一的代碼放在我的工作中?我做錯了什麼,或者是Unity還是兩者兼而有之?我真的只想使用Unity來測試驅動器C代碼。任何幫助將不勝感激。提前致謝!

回答

1

我想出了我的問題。事實證明,團結要求你定義一個setup和一個teardown函數,如果你不這樣做,你會得到類似於我遇到的錯誤。

1

首先,嘗試'gcc * .c -o mytest'。這會將所有C源文件編譯成目標文件,然後將它們連接在一起形成二進制文件'mytest'。請記住,所有C源文件必須在可以鏈接到一起之前編譯爲目標文件。 (一個庫只是一堆打包的目標文件。)

如果你在/ usr/lib中安裝了一個統一庫,你可以做一些類似'gcc mycode.c -lunity -o mytest'的東西。如果你在當前目錄下有一個統一庫,你可以做'gcc mycode.c ./unity.a -o mytest'。這告訴編譯器在當前目錄中查找名爲'unity.a'的文件。一些庫構建.so文件('共享對象'文件,類似於Windows中的DLL)。如果是這樣的話,用'unity.so'代替'unity.a'應該可以工作。 (我假設在這裏有一個Unix/Linux環境。)

作爲Unity的替代品,請看Google測試,它可以與C代碼一起使用。我知道它也支持Mac。主要的好處是一個龐大而活躍的社區。有關谷歌測試從另一個SO問題的更多信息:Is Google Test OK for testing C code?

+0

我試過'gcc * .c -o mytest',但我仍然得到「ld:symbol(s)not found for architecture x86_64」錯誤。至於安裝它,我不知道如何達到這一點,因爲我似乎無法建立它。 – 2012-03-19 04:26:51

相關問題