1

首先让我说我不是 C 开发人员,而且我对实际编写真实世界的 C 代码知之甚少。我一直在做一些研究,以找到一个 xUnit 框架,我可以用它来为 C 代码编写测试,并且基于我发现它看起来像Unity是我想一起去的那个。看起来很简单,但是从 Unity 的网站下载 zip 文件后,我真的不知道该怎么做。它似乎没有正常的配置/制作/制作安装,如果有的话,我不确定这是否是我应该使用的。然而,它确实附带了一些 rake 任务,但这些任务似乎都不是任何类型的“安装”任务。作为最后的手段,我尝试将 3 个源文件与我的代码一起复制(我真的希望这不是正确的做法),但是当我尝试使用 gcc 编译我的 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 位处理器不兼容......(我在 Mac OS 10.7.3 上运行,配备 2.4 GHz Intel Core 2 Duo 处理器 - 另一件可能或可能不相关的事情是我已经获得了 XCode 版本 4.3 (4E109) 以及 XCode 的命令行工具)在这一点上,我只是抓住了最后一根稻草,而且我的头顶上。

我的问题是,获取第三方 C 库(例如 Unity)并使其可用于我的 C 代码的正确过程是什么?我是否需要在 Python 或 Ruby 中安装一些东西,或者在我的路径中添加一些东西,比如在 Java 或其他东西中?不应该只是将统一的代码放入我的工作中吗?我做错了什么还是Unity或两者兼而有之?我真的只想能够使用 Unity 测试驱动 C 代码。任何帮助将不胜感激。提前致谢!

4

2 回答 2

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 的替代方案,请查看可与 C 代码一起使用的 Google Test。我知道 Mac 也支持它。主要好处是一个庞大而活跃的社区。来自另一个 SO 问题的有关 Google Test 的更多信息:Google Test 是否可以用于测试 C 代码?

于 2012-03-19T04:10:08.093 回答
1

我发现了我的问题。事实证明,unity 需要你定义一个setup和一个teardown函数,如果你不这样做,你会得到类似于我遇到的错误。

于 2012-03-22T03:39:35.400 回答