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 说没有问题的主要内容,如果未能解决你的问题,请参考以下文章