OCMock在运行时失败

时间:2012-03-06 16:25:59

标签: objective-c cocoa xcode4 osx-lion ocmock

我试图在我的测试用例中第一次使用OCMock。它是一个Mac项目,基于Xcode 4.3构建并以Lion为目标。主应用程序和测试包都打开了ARC,因此每次执行测试时,我都会看到以下日志消息:

GC: forcing GC OFF because OBJC_DISABLE_GC is set

那很好,因为我使用ARC所以我不关心GC。当我构建单元测试时,与OCMock(2.0.1)的最新稳定版本链接,构建没有问题。在运行时,在上面的日志语句之后,我得到以下内容:

The test bundle at /Users/___/Library/Developer/Xcode/DerivedData/___-ayizwpehemunvodsdvczckkvarsh/Build/Products/Debug/___Tests.octest could not be loaded because its Objective-C runtime information does not match the runtime information required by the test rig. This is likely because the test rig is being run with Objective-C garbage collection disabled, but the test bundle requires Objective-C garbage collection. To enable Objective-C garbage collection for the test rig, run it in an environment without the OBJC_DISABLE_GC environment variable. 2012-03-06 10:29:32.812 otest[8486:203] *** NSTask: Task create for path '/Users/___/Library/Developer/Xcode/DerivedData/___-ayizwpehemunvodsdvczckkvarsh/Build/Products/Debug/___Tests.octest/Contents/MacOS/___Tests' failed: 22, "Invalid argument". Terminating temporary process.

该消息暗示垃圾收集是最常见的罪魁祸首,但如上所述,我无法使用GC。那么,其他什么设置可能会让我在运行时搞砸了?我没有想到我做了什么非典型的事情,而且我已经查看了我的测试项目的设置以确定,并且没有看到任何奇怪的事情。

更新

我能用一个新的空项目重现这个。

  1. 创建一个新项目并让它创建单元测试,并启用ARC
  2. 从单元测试包的构建设置中清除Test Host设置
  3. 链接到OCMock框架
  4. 执行测试,并见证我上面报告的相同错误
  5. 此外,当我关闭ARC并进行垃圾收集必需时,clang会报告一个mach-o链接器错误,因此构建不会成功。如果我删除了OCMock框架的链接,它构建正常。这支持了我最初的想法,即问题出在垃圾收集以外的其他地方。

1 个答案:

答案 0 :(得分:18)

我在Hamcrest tutorial({em>通过OCMock tutorial链接的OCMock.org更仔细地阅读后,找到了我能想到的所有内容的一天后,我找到了答案。那里也是)。出于某种原因,需要将Hamcrest和OCMock的框架复制到产品目录中。然后一切都像魅力一样。

  1. 转到“测试包”的设置
  2. 转到构建阶段标签
  3. 点击添加构建阶段按钮,然后选择添加复制文件
  4. 将新的复制文件构建阶段目标设置为产品目录
  5. 将OCMock.framework从项目大纲拖到阶段
  6. 的文件列表中
  7. 将复制文件阶段拖到运行脚本阶段
  8. 上方

    照常执行测试