c - 如何使用 "unity"在 Mac (Lion) 上对 C 代码进行单元测试?

标签 c gcc osx-lion unity-test-framework

首先声明我不是 C 语言开发人员,而且我对实际编写真实世界的 C 代码知之甚少。我一直在做一些研究以找到一个 xUnit 框架,我可以用它来为 C 代码编写测试,并且基于我发现它看起来像 Unity是我想一起去的那个。看起来很简单,但我真的不知道从 Unity 网站下载 zip 文件后该怎么做。它似乎没有正常的 configure/make/make install,如果有,我不确定那是我应该使用的。然而,它确实附带了一些 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 时,我遇到了类似的错误)。我认为这意味着 unity 附带的代码需要与我所拥有的不同的编译器:

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

或者 unity 可能与 64 位处理器不兼容...(我在 Mac OS 10.7.3 上运行,配备 2.4 GHz Intel Core 2 Duo 处理器 - 另一件可能相关也可能不相关的事情是我有 XCode 版本 4.3 (4E109) 和 XCode 的命令行工具)在这一点上,我只是捕获了救命稻草,我已经不知所措了。

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

最佳答案

首先,尝试“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.a”替换为“unity.so”应该可行。 (我在这里假设一个 Unix/Linux 环境。)

作为 Unity 的替代品,请查看可与 C 代码一起使用的 Google Test。我知道 Mac 也支持它。主要好处是一个庞大而活跃的社区。来自另一个 SO 问题的关于 Google Test 的更多信息:Is Google Test OK for testing C code?

关于c - 如何使用 "unity"在 Mac (Lion) 上对 C 代码进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9764496/

相关文章:

c - Go TCP 读取是非阻塞的

C 将指向数组的指针传递给函数问题

qsort 方法混淆错误

c++ - 如何将命题逻辑树转换为合取范式 (CNF) 树

c++ - Boost Spirit代码,用msvc编译,用gcc编译报错

gcc:对 _mcount 的 undefined reference (gprof 检测)

c++ - 使用 gcc/g++ 编译器编译 c++

ruby-on-rails-3 - 在 OSX Lion 下使用 RVM 和 Readline 安装 Ruby 1.9.2 时出错

macos - 关闭文档而不退出应用程序时 Lion 恢复

cocoa - NSPanel 在错误的空间弹出