OCUnit 测试失败,但 Xcode Log Navigator 说没有问题

Posted

技术标签:

【中文标题】OCUnit 测试失败,但 Xcode Log Navigator 说没有问题【英文标题】:OCUnit tests failing, but Xcode Log Navigator says No Issues 【发布时间】:2011-12-09 16:32:38 【问题描述】:

我在 Xcode 及其“日志导航器”中遇到了一个非常隐秘的问题。

我已经重新创建了这样的问题;我有一个非常简单的 OCUnit 测试:

-(void)testSimpleFailure

    STFail(@"Please fail!");

我清理我的构建,我构建我的测试方案,并运行我的测试。

在输出控制台窗口中,我看到所有测试都在执行,包括上面的那个。控制台显示测试实际运行并失败:

##teamcity[testFailed name='-|[SimpleTestClassTests.testSimpleFailure|]' message='Please fail!' details='']

但是,Xcode 显示“Tests Succeeded overlay”,左侧的“Log Navigator”表示没有问题,一切都是绿色的。

还有其他人遇到过类似的问题吗?有谁知道如何解决这个问题?

我非常希望在我提交之前不要误报。

编辑以澄清我的问题。

【问题讨论】:

【参考方案1】:

我正在设备上运行我的应用程序测试和单元测试。我得到了和你一样的结果——测试失败了,但日志导航器说一切都通过了。不仅如此,我不能在我的代码中设置断点。

我的解决方案是“编辑方案...”,选择“测试”方案,并将我的调试器从“LLDB”更改为“GDB”。我正在使用 Xcode 4.3.2,我的编译器将所有目标设置为 LLVM 3.1

将测试方案的调试器更改为 GDB 后,日志导航器会报告测试失败,我可以在测试运行时设置断点和调试。

链接:搜索“执行任何代码之前单元测试崩溃”(LLDB 错误)https://github.com/kstenerud/ios-Universal-Framework

【讨论】:

如果我能给你更多的支持,我会的。我花了一整天的时间来反对这个。它适用于我的简单测试用例。我希望它能在明天的实际项目中发挥作用。 这里也一样。切换到 GDB 修复了它。 非常感谢,这让我发疯了! :p【参考方案2】:

好的,经过大约 3 位开发人员 5 天多的时间研究这个问题,我们找到了解决方案:

rm -rf Library/Application\ Support/iPhone\ Simulator

或者,或者,如果您不喜欢删除整个目录树:

转到您的 iOS 模拟器应用程序。从顶部菜单中选择 iOS 模拟器,然后选择“重置内容和设置...”

显然,模拟器和 Xcode 之间的某些东西被破坏了,因此 Xcode 无法连接到模拟器来观看测试。 Xcode 认为没有运行测试,因此测试通过。

究竟是什么原因造成的,我们不确定,但经过 5 天的艰苦训练和 1 个解决方案后,我们不在乎,因为我们正在前往最近的酒吧。

干杯。

【讨论】:

您在设备上进行单元测试时是否看到过这种行为?我的“解决方案”是在我刚刚编写的测试的顶部设置一个断点并逐步完成。你提交雷达了吗?我想欺骗它。【参考方案3】:

我刚刚阅读了这篇关于同样影响 Mac 应用程序的问题的长文:

http://masonmark.com/the-xcode-fairy/

诀窍似乎是退出 Xcode 并再次打开项目。该错误是间歇性的,有时会出现,或者永远不会出现,并且会一直保持这种状态,直到下次重新启动 Xcode。

这本书也不错。

【讨论】:

【参考方案4】:

是的,我见过这种情况,断断续续且烦人。

请确保选择了顶部(最近的)日志消息。

【讨论】:

幸运的是,每个 Log Navigator 日志都有一个时间戳,所以我确定我选择了正确的日志。 是的,我明白,我知道你提到的错误是真实的,我也明白了。当我在演示 TDD 期间遇到这个问题时,这可能会相当尴尬(对 Apple 来说也是如此)。 :-) 你如何解决这个问题?这已经在最后一天发生了。【参考方案5】:

什么对我有用:像Nick L in his answer PLUS 中提到的那样重置模拟器,然后关闭 XCode 并重新启动。然后每个带有 STAssertTrue(false) 或 STFail 的构建都会给我一个否定的结果。

【讨论】:

【参考方案6】:

如果您使用的是 XCTest,请确保您正在部署到 iOS 7 模拟器。如果你部署到 iOS 6,它会说构建成功,测试失败,但在调试器中没有给出任何日志信息。

【讨论】:

以上是关于OCUnit 测试失败,但 Xcode Log Navigator 说没有问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在命令行中捕获 OCUnit 的测试失败/成功?

OCUnit 中的简化断言

XCode OCUnit 在运行任何测试代码之前崩溃并出现 Abort 陷阱:6

OCUnit/XCode 单元测试的优秀测试运行器

OCUnit 测试在未测试的类中给出错误

将 OCUnit 测试框架添加到现有 Xcode 项目时遇到问题