OCMock在运行时失败

Dov*_*Dov 5 cocoa objective-c ocmock xcode4 osx-lion

我试图在我的测试用例中第一次使用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. 执行测试,并见证我上面报告的相同错误

此外,当我关闭ARC并使垃圾收集成为必需时,然后clang报告一个mach-o链接器错误,因此构建不成功.如果我删除了OCMock框架的链接,它构建正常.这支持了我最初的想法,即问题出在垃圾收集之外的某个地方.

Dov*_*Dov 18

我找到了答案,寻找一切我能想到的,在经过一天的Hamcrest教程(通过阅读更仔细OCMock教程从链接OCMock.org,它提到在那里,太).出于某种原因,需要将Hamcrest和OCMock的框架复制到产品目录中.然后一切都像魅力一样.

  1. 转到测试包的设置
  2. 转到Build Phases选项卡
  3. 单击" 添加构建阶段"按钮,然后选择" 添加复制文件"
  4. 设置新的拷贝文件联编阶段目标,以产品目录
  5. 将OCMock.framework从项目大纲拖到该阶段的文件列表中
  6. 拖动上面的文件复制阶段运行脚本阶段

像往常一样执行测试