iPhone SenTestingKit无法在UnitTestBundle目标中找到AppDelegate

时间:2010-07-06 21:00:16

标签: iphone unit-testing xcode

我正在尝试使用XCode 3.2.3为iPhone应用程序设置单元测试。

我按照http://developer.apple.com/iphone/library/documentation/xcode/conceptual/iphone_development/135-Unit_Testing_Applications/unit_testing_applications.html

中的步骤操作

尽我所能,但在尝试构建时收到此错误消息: “((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");
}

5 个答案:

答案 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的文档,有两种单元测试。

  • 逻辑测试
  • 应用程序测试

应用程序测试仅适用于硬件设备。如果您使用的是模拟器,则无法使用。

看到这个: http://developer.apple.com/library/ios/#documentation/Xcode/Conceptual/iphone_development/135-Unit_Testing_Applications/unit_testing_applications.html