Xcode - 调试单元测试目标

19
我正在使用OCUnit编写我的iPhone应用程序的测试。有没有办法调试单元测试并设置断点以查看发生了什么?
在不能使用断点的情况下,编写单元测试非常困难。

+1 这对于 XCode3 来说是邪恶的,很高兴有人问。 - Nick Weaver
5个回答

12

这个链接是适用于Xcode 3的,David Gelhar发布的链接是正确的。

对于Xcode 4来说,操作要简单得多。编辑当前计划方案,进入“测试”操作。在底部点击“+”,添加包含想要运行的测试的测试包。现在当你选择“Product -> Test”时,它会运行这些测试。任何激活的断点都会像你预期的那样被命中。


+1 感谢您的回答,这是切换到XCode4的一个很好的理由。 - Nick Weaver
5
希望那对我有用。我正在使用Xcode 4,断点已经打开,在模式中也打开了断点的大开关,并在测试类和我想要测试的类中都设置了断点,但是它会跳过所有这些设置,好像这些设置都没有作用。区别可能在于我正在尝试进行逻辑测试,而不是应用程序测试。 - Hack Saw
我和hack-saw有同样的问题。@BJHomer,“应该可以工作”这个说法有点含糊。这是否意味着在逻辑测试中断点对你有效?还是你只是理论上认为它们应该工作,但没有验证过? - user23987
@toolbear 断点在逻辑测试和应用程序测试中对我都有效。我每天在工作中使用它们。 - BJ Homer
我遇到了同样的问题。下面@Daniel Sproul的答案解决了这个问题。 - Max MacLeod
显示剩余2条评论

12

在使用XCode 4.2时,(通过勾选“包括单元测试”复选框来设置项目的SenTestKit单元测试),Product->Test 没有触发我的断点,但是 Product->Perform Action->Test Without Building 看起来可以解决问题。希望这能帮到您。


直到我在构建项目的方案的“测试”部分的“参数”选项卡中单击“使用运行操作的参数和环境变量”复选框后,这才开始对我起作用。 - Jim Hayes
1
确保在单元测试目标的构建设置中关闭“构建后测试”。 - mamills

3
您可能不小心在 Scheme -> Test -> Info 中禁用了“Debugger: Debug Executable”选项。

enter image description here


1
这是一篇关于编程的博客文章:调试Cocoa应用程序单元测试,其中提供了如何进行调试的说明(至少适用于XCode 3;不确定XCode 4是否适用)。

0
在XCode 4中需要注意的另一件事是,您必须将被测试的类添加到单元测试目标以及主项目中。似乎这不是必需的,但它会影响您设置断点的能力。
当您运行时,调试日志中会出现警告消息。这些消息看起来像这样:
“Class XXX is implemented in both YYY and ZZZ. One of the two will be used. Which one is undefined.”
一旦我从单元测试目标中删除了警告中提到的类,Xcode就开始触发断点了。
您可以通过单击.M文件并在检查器窗口下关闭其在单元测试目标中的成员身份来从目标中删除类。

我还注意到一些成员变量不保持设置等奇怪的行为,当我修复目标后,这些问题消失了。 - Matt__C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接