我试图在我的测试用例中第一次使用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。那么,其他什么设置可能会让我在运行时搞砸了?我没有想到我做了什么非典型的事情,而且我已经查看了我的测试项目的设置以确定,并且没有看到任何奇怪的事情。
更新
我能用一个新的空项目重现这个。
Test Host
设置此外,当我关闭ARC并进行垃圾收集必需时,clang
会报告一个mach-o链接器错误,因此构建不会成功。如果我删除了OCMock框架的链接,它构建正常。这支持了我最初的想法,即问题出在垃圾收集以外的其他地方。
答案 0 :(得分:18)
我在Hamcrest tutorial({em>通过OCMock tutorial链接的OCMock.org更仔细地阅读后,找到了我能想到的所有内容的一天后,我找到了答案。那里也是)。出于某种原因,需要将Hamcrest和OCMock的框架复制到产品目录中。然后一切都像魅力一样。
照常执行测试