3

我在 Xcode 4.5 中有一个简单的Mac OS X 命令行工具项目。我从Cocoa 单元测试包模板中手动添加了一个单元测试目标(命令行工具模板没有包含单元测试开关)。问题:运行测试(产品>测试)时,我无法让调试器在断点处停止。

正如我在询问之前进行了谷歌搜索一样,这些是我已经尝试/检查过的一些事情:

  • 单元测试确实运行(它们在例如 STFail() 上正确失败)。
  • 顶部栏上的主断点开关已打开(将其关闭再打开无济于事)。
  • 测试目标上的构建配置设置为调试(调试器是 LLDB,更改为 GDB 没有帮助)。
  • 调试一般工作。在主控制台应用程序中,目标断点被击中得很好,所以只有单元测试有问题。此外,我制作了一个包含单元测试的测试 iOS 应用程序——应用程序和单元测试都很好。
  • 构建设置看起来不错(让我知道是否还有其他我应该检查的):
    • 生成调试符号 = 是
    • 优化级别 = 无 [-O0](用于调试)
  • 设置符号断点(在 -[NSException raise] 或 objc_exception_throw 上)没有帮助。
  • 重新加载项目或重新启动 Xcode 没有帮助。

我还能做些什么来在单元测试中遇到断点?

4

2 回答 2

2

检查单元测试目标的“构建后测试”构建设置(在“单元测试”下)。

如果此设置设置为“是”,那么在构建目标之后,测试将通过 Xcode“外部”的 shell 脚本执行,然后再通过 Xcode 执行。因此,如果在执行脚本时您的测试失败,那么第二次执行(“内部”Xcode)将不会发生,因此您的断点将不会被命中。

-或者-

如果您尝试调试的测试是失败的测试,则可能是您的 -setUp 方法中发生了失败。如果您在 setUp 中使用 OCMock 并且忘记存根在设置期间碰巧调用的方法,则可能会发生这种情况。

于 2013-01-08T20:05:50.620 回答
0

我对 ios 应用程序的单元测试陷入了类似的困境。在不同的位置使用新的代码副本为我解决了这个问题。

更新:有问题的状态似乎在项目/工作空间内的 xcuserdata 目录中。当我再次遇到它时,清除它解决了这个问题。但请注意,您将丢失所有以前的状态(例如,设置断点、打开的窗口等)

于 2013-04-10T23:43:07.363 回答