【问题标题】:How do I use "unity" to unit test C code on Mac (Lion)?如何在 Mac (Lion) 上使用“unity”对 C 代码进行单元测试?
【发布时间】:2012-04-03 14:28:57
【问题描述】:

首先让我说我不是 C 开发人员,而且我对实际编写真实世界的 C 代码知之甚少。我一直在做一些研究,以找到一个可以用来为 C 代码编写测试的 xUnit 框架,根据我的发现,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)

或者说 unity 可能与 64 位处理器不兼容...(我正在使用 2.4 GHz Intel Core 2 Duo 处理器的 Mac OS 10.7.3 上运行 - 另一件可能相关也可能不相关的事情是我有 XCode 版本 4.3 (4E109) 以及 XCode 的命令行工具)在这一点上,我只是抓住了稻草,而且我的头脑已经过时了。

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

【问题讨论】:

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


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

    【讨论】:

    • 我尝试了“gcc *.c -o mytest”,但仍然收到“ld: symbol(s) not found for architecture x86_64”错误。至于安装它,我不知道如何达到这一点,因为我似乎无法构建它。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2014-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-29
      相关资源
      最近更新 更多