【问题标题】:Xcode 5 -- Test target did not finishXcode 5 -- 测试目标未完成
【发布时间】:2025-12-13 09:00:01
【问题描述】:

从今天早些时候开始,我从 Xcode 5 运行测试时无法通过测试。我知道所有测试都通过了,因为我可以从命令行(嗯,CI 作业)运行它们并且它们都通过了在那里。

我是否不小心更改了某些项目设置或导致此问题的原因?我想不出任何办法来恢复到一个好的状态——我已经尝试过在我们的 Git 历史中回退几个版本,所以我知道这不是代码更改......

编辑:卸载并重新安装应用程序后,所有测试都运行完成,但我的问题仍然存在——它是如何进入这种状态的?

【问题讨论】:

  • 可能是xcode5中的一个bug,可能是git忽略的一些用户配置被改变了
  • 我曾想过它可能是一个被忽略的用户配置,但不幸的是找不到任何东西。还没有复制它...
  • 设法意外地再复制了几次。不过,我仍然不知道是什么原因造成的。我尝试升级到 XCTest,这是我在其他地方看到的建议,它暂时解决了问题,只是第二天再次发生。
  • 我见过几次 - 但我刚刚提交了雷达并忽略了它。
  • 归档雷达——这将是一个好主意。谢谢提醒。

标签: objective-c xcode5 sentestingkit


【解决方案1】:

几周后没有得到更好的答案,我将用似乎对我有用的解决方案来回答我自己的问题。

从模拟器中进行简单的卸载/重新安装似乎可以解决问题,但我还没有确定是什么原因造成的,或者为什么会解决这个问题。

【讨论】:

    【解决方案2】:

    我也有这个问题。对我来说,修复它的更改是将 Build Settings 中的 Wrapper Extension 从 octest 转换为 xctest,正如@owenfi 在这里回答的那样:XCTest did not finish in Xcode 5

    【讨论】:

    • 我实际上已经尝试过(上面我的一个 cmets),但不幸的是它没有为我修复它。
    【解决方案3】:

    我遇到了同样的问题,在我的情况下,问题是在创建多个目标/重命名目标后出现的。

    为了解决这个问题,我必须在“目标浏览器”中选择测试目标(不管它的名称是什么),然后在“常规”选项卡上有一个标有“目标”的下拉框。我的设置为“无”,这导致没有任何测试。我必须将其重新设置为我的有效目标之一才能运行测试。

    【讨论】:

    • 就我而言,我没有进行任何重命名。不过,感谢您的建议。
    【解决方案4】:

    对我来说,这似乎是 64 位模拟器的问题。 没有一个测试可以在 64 位上运行,但是当我切换到 32 位时,它们开始运行。

    【讨论】:

      【解决方案5】:

      我设法通过删除对将日志重定向到文件的 freopen() 函数的调用来解决此问题。我还通过删除将大量数据打印到控制台的几个 NSLog() 调用来修复它以进行测试。 Xcode 必须在日志进入窗口时读取日志,以检查测试是否完成,并且打印出的大量数据肯定破坏了它的解析器。

      【讨论】:

      • 我认为我们的测试中没有任何 NSLog,但我是否正确理解您正在将 NSLog 输出重新路由到文件?或者你是否通过阻止 Xcode 这样做来修复它?
      • 是的,我通过删除对 freopen() 的调用修复了测试。然而,特别是一项测试仍然给出“测试目标未完成”,这是由于打印出几个巨大的字符串而导致日志被垃圾邮件发送。一旦我删除了巨大的 NSLog() 输出,问题就消失了。
      • 我仍然不确定 freopen 是您添加的,还是 Xcode 默认执行的。你能澄清一下吗?
      • 好的,freopen() 是我添加的调用,默认情况下不存在。它可用于将您的标准错误重定向到文件。我的电话看起来像这样:freopen([logPath fileSystemRepresentation],"a+",stderr)
      • 有趣,以前没见过。同样有趣的是它会导致测试失败。似乎有很多事情可以导致它。我今天再次发生这种情况,这是几个月来的第一次。
      【解决方案6】:

      现在可能有点晚了,但这对我们有用: 转到构建设置并在代码签名下 - 如果您没有有效的开发人员证书,请将调试和发布设置为“不要代码签名”。

      【讨论】: