gpt4 book ai didi

objective-c - OCMock 在运行时失败

转载 作者:太空狗 更新时间:2023-10-30 03:47:02 28 4
gpt4 key购买 nike

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


GC:强制关闭 GC,因为设置了 OBJC_DISABLE_GC

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


/Users/___/Library/Developer/Xcode/DerivedData/___-ayizwpehemunvodsdvczckkvarsh/Build/Products/Debug/___Tests.octest 中的测试包无法加载,因为其 Objective-C 运行时信息与所需的运行时信息不匹配试验台。这可能是因为测试装置在禁用 Objective-C 垃圾回收的情况下运行,但测试包需要 Objective-C 垃圾回收。要为测试装置启用 Objective-C 垃圾收集,请在没有 OBJC_DISABLE_GC 环境变量的环境中运行它。
2012-03-06 10:29:32.812 otest[8486:203] *** NSTask:为路径“/Users/___/Library/Developer/Xcode/DerivedData/___-ayizwpehemunvodsdvczckkvarsh/Build/Products/Debug/___Tests 创建任务.octest/Contents/MacOS/___Tests' 失败:22,“无效参数”。终止临时过程。

该消息暗示垃圾收集是最常见的罪魁祸首,但如前所述,我无法使用 GC。那么,还有哪些其他设置可能会在运行时搞砸我?我不认为我在做任何不正常的事情,并且我查看了我的测试项目的设置以确保没有发现任何奇怪的事情。

更新

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

  1. 创建一个新项目并让它创建单元测试,并启用 ARC
  2. 从单元测试包的build设置中清除测试主机设置
  3. 链接到 OCMock 框架
  4. 执行测试,并见证我在上面报告的相同错误

此外,当我关闭 ARC 并将垃圾收集设为必需时,clang 会报告 mach-o 链接器错误,因此构建不会成功。如果我删除指向 OCMock 框架的链接,它可以正常构建。这支持了我最初的想法,即问题出在垃圾收集之外的其他地方。

最佳答案

经过一天的搜索,我在 Hamcrest tutorial 中找到了答案。 (通过 OCMock tutorial 链接的 OCMock.org 仔细阅读,那里也提到了它)。由于某些原因,需要将 Hamcrest 和 OCMock 的框架复制到产品目录中。然后一切都像魅力一样。

  1. 转到测试包的设置
  2. 转到构建阶段标签
  3. 点击添加构建阶段按钮,然后选择添加复制文件
  4. 将新的 Copy Files 构建阶段的Destination 设置为Products Directory
  5. 将 OCMock.framework 从项目大纲拖到该阶段的文件列表中
  6. 将复制文件阶段拖到运行脚本阶段之上

照常执行测试

关于objective-c - OCMock 在运行时失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9587750/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com