我正在尝试使用XCode 3.2.3为iPhone应用程序设置单元测试。
中的步骤操作尽我所能,但在尝试构建时收到此错误消息: “((yourApplicationDelegate)!= nil)”应该是真的。 UIApplication未能找到AppDelegate
(这是USE APPLICATION UNIT TEST的默认琐碎测试是真的)
我正在构建我的应用测试目标,如文档中所述,并收到此错误。
我是否需要确保我的所有非测试用例源都在我的测试包中?
混淆
-
我将源文件包含到我的项目中并且编译得很好,但它仍然遇到相同的单元测试错误:
“((yourApplicationDelegate)!= nil)”应该是真的。 UIApplication未能找到AppDelegate
原始代码与模板代码相同:
-(void) testAppDelegate {
id yourApplicationDelegate = [[UIApplication sharedApplication] delegate];
STAssertNotNil(yourApplicationDelegate, @"UIApplication failed to find the AppDelegate");
}
答案 0 :(得分:10)
确保指定了单元测试包的BUNDLE_LOADER和TEST_HOST构建设置。
BUNDLE_LOADER = $(BUILT_PRODUCTS_DIR)/YourApp.app/YourApp
TEST_HOST = $(BUNDLE_LOADER)
此外,在Xcode4中,不需要Apple指南中描述的许多步骤(例如复制应用目标)。我建议创建新项目,包括单元测试和环顾四周。
答案 1 :(得分:1)
这是针对OP的,如果问题仍然存在且仍然相关,并且对于论坛浏览器:
我也跟随了iOS开发指南中关于单元和应用程序测试的gudielines。 我也在遵循应用程序测试指南时遇到了问题:
Test Suite 'FirstSuite' started at 2010-12-08 21:30:33 GMT 0000
Test Case '-[FirstSuite testAppDelegate]' started.
/Users/TomCruise/Documents/iPhoneDevelopment/PickerLeak/FirstSuite.m:22: error:-[FirstSuite testAppDelegate] : "((app_delegate) != nil)" should be true. Cannot find the application delegate.
Test Case '-[FirstSuite testAppDelegate]' failed (0.000 seconds).
即,未按预期找到应用程序委托。
问题是当我认为我遵循指导原则时,我没有。显然,应用程序测试仅在Device上运行。所以我从模拟器切换到设备(用于AppTesting目标),连接我的iPhone,然后做Build + Run(cmd + return / enter)。应用程序自行安装,几秒钟后退出返回代码1(我猜这表示返回代码有错误。)
应用程序退出后,我确实移动了+ cmd + R,(uparrow + cmd + R)以获取日志提示,并且可以阅读以下内容:
2010-12-08 22:59:59.163 PickerLeak[5356:307] -[UIPickerView setFrame:]: invalid height value 200.0 pinned to 180.0
Test Suite 'All tests' started at 2010-12-08 22:00:00 GMT 0000
Test Suite '/var/mobile/Applications/{number}/PickerLeak.app/PickerLeakTests.octest(Tests)' started at 2010-12-08 22:00:00 GMT 0000
Test Suite 'FirstSuite' started at 2010-12-08 22:00:00 GMT 0000
**Test Case '-[FirstSuite testAppDelegate]' started.
Test Case '-[FirstSuite testAppDelegate]' passed (0.001 seconds).**
Test Case '-[FirstSuite testFail]' started.
/Users/TomCruise/Documents/iPhoneDevelopment/PickerLeak/FirstSuite.m:17: error: -[FirstSuite testFail] : Must... fail.
Test Case '-[FirstSuite testFail]' failed (0.003 seconds).
Test Suite 'FirstSuite' finished at 2010-12-08 22:00:00 GMT 0000.
Executed 2 tests, with 1 failure (0 unexpected) in 0.004 (0.008) seconds
所以......万岁! :)
Godspeed,开发者。
答案 2 :(得分:1)
我已经两次失败了。 您需要设置BUNDLE_LOADER和TEST_HOST构建设置才能使其正常工作。 但这还不够,还需要设置Bundle Loader和Test Host。 请检查how to implement application tests in xcode4?,该答案对我来说非常合适。
答案 3 :(得分:0)
我无法直接回答您的问题,因为我也从未接受过与OCUnit一起使用的应用程序测试。我了解到很多人使用Google Toolbox for Mac iPhone单元测试库或GHUnit来简化这一过程。
正如上面链接的Blazing Cloud帖子指出的那样,OCUnit(和GTM / GHUnit)比Rspec风格更加JUnit风格。在Pivotal,我们使用Rspec几乎所有东西,我们想要一些类似于Objective C的东西。所以,我们写了Cedar,我们有意设计它与UIKit一起工作,在iOS设备上运行等。它是免费提供和开放的资源;如果您对此有任何疑问,可以发送电子邮件至讨论组:cedar-discuss@googlegroups.com。
答案 4 :(得分:0)
根据Apple的文档,有两种单元测试。
应用程序测试仅适用于硬件设备。如果您使用的是模拟器,则无法使用。