iPhone单元测试挂起;无法调用-applicationDidFinishLaunching:

时间:2009-02-10 09:05:19

标签: iphone unit-testing ocunit

我为使用OCUnit上的Google Toolkit for Mac框架构建的iPhone项目设置了单元测试。我有一个名为“单元测试”的依赖项目,可以根据需要构建和运行测试。

然后一切都停止了工作,我无法理解。突然,我的“单元测试”可执行文件启动,只是坐在那里,等待,永远。它永远不会达到Application Delegate的-applicationDidFinishLaunching:方法,这就是调用实际单元测试的方法。将NSLog插入委托的-init方法告诉我该方法被调用,但应用程序永远不会“完成”启动。

如果我修改运行“Unit Tests”可执行文件的shell脚本并取出-RegisterForSystemEvents参数,则可执行文件立即存在(它不运行任何测试)并给我以下消息:

  

因为没有系统事件服务器而终止   (如果你想在没有SpringBoard的情况下运行,请运行EventPump或传递参数“-RegisterForSystemEvents”。

因为当我删除那个参数时它会终止,所以我很好奇这个参数到底是做什么的,以及如何,因为它似乎导致了挂起。但是由于没有它没有测试,我需要确定如何让它再次运行。但是,Google不提供与当前情况相关的任何内容的链接,并且开发文档中的任何内容都没有帮助。

有什么想法吗?

4 个答案:

答案 0 :(得分:3)

如果Xcode在构建期间挂起(构建结果窗口显示“正在运行自定义shell脚本”但在那里停止),请选择单元测试目标并单击“获取信息”。然后选择Properties选项卡并清除'Main Nib File'的文本字段并清理目标。

单击“Build and Go”现在应该可以成功运行测试。

答案 1 :(得分:1)

如果遇到其他人,这就是我最终的工作。

我制作了代码的本地副本,然后将整个代码库恢复为我的Git存储库中的先前提交。干净的结账仍然可以运行测试。然后,我逐个文件重新引入了我的更改,检查每次增量合并后单元测试是否有效。

当单元测试表明失败时,我预计会达到某种程度,但它从来没有出现过。我合并了所有的更改,单元测试仍然正常运行。

显然,对于没有具有工作副本的SCM系统的任何人来说,这都不会有帮助。在这种情况下,制作一个干净的项目并将代码拉过来是最好的选择。

答案 2 :(得分:1)

我们在今天早上解决了这个问题。树顶GTM不应该再挂了。它与在有机会获得applicationDidFinishLaunching事件之前切换的委托有关。该主题中的更多细节:

http://groups.google.com/group/google-toolbox-for-mac/browse_thread/thread/513a3252d655e1e3

答案 3 :(得分:0)

我遇到了同样的问题 - 看起来我在IB中弄乱了我的AppDelegate。

确保:

  • 您有AppDelegate类 在NIB中实例化。

  • 它的window出口指向 该NIB中的UIWindow。

  • 任何其他商店都指向哪里 他们应该(在我看来, tabBarController到我的instanced 的UITabBarController)。

  • 最后是你的文件所有者 代表出口指向你的 的AppDelegate

呼。