2012-03-19 47 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

相关问题