我为使用OCUnit上的Google Toolkit for Mac框架构建的iPhone项目设置了单元测试。我有一个名为“单元测试”的依赖项目,可以根据需要构建和运行测试。
然后一切都停止了工作,我无法理解。突然,我的“单元测试”可执行文件启动,只是坐在那里,等待,永远。它永远不会达到Application Delegate的-applicationDidFinishLaunching:
方法,这就是调用实际单元测试的方法。将NSLog插入委托的-init
方法告诉我该方法被调用,但应用程序永远不会“完成”启动。
如果我修改运行“Unit Tests”可执行文件的shell脚本并取出-RegisterForSystemEvents
参数,则可执行文件立即存在(它不运行任何测试)并给我以下消息:
因为没有系统事件服务器而终止 (如果你想在没有SpringBoard的情况下运行,请运行EventPump或传递参数“-RegisterForSystemEvents”。
因为当我删除那个参数时它会终止,所以我很好奇这个参数到底是做什么的,以及如何,因为它似乎导致了挂起。但是由于没有它没有测试,我需要确定如何让它再次运行。但是,Google不提供与当前情况相关的任何内容的链接,并且开发文档中的任何内容都没有帮助。
有什么想法吗?
答案 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
呼。