2010-07-06 23 views
3

我正嘗試使用XCode 3.2.3爲iPhone應用程序設置我的單元測試。iPhone SenTestingKit未能在UnitTestBundle目標中找到AppDelegate

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

儘可能接近我所能的步驟,但我在努力建立收到此錯誤信息: 「(!(yourApplicationDelegate)=無)」應該是真實的。 UIApplication的未能找到AppDelegate中

(這是缺省的普通測試使用的應用單元測試爲真)

我建立我的應用程序的測試目標,如文檔中進行了討論,並得到這個錯誤。

我是否需要確保所有非測試用例源都在我的測試包中?

混淆

-

我包含在源文件到我的項目,它編譯罰款,但它仍然受到同樣的單元測試錯誤:

"((yourApplicationDelegate) != nil)" should be true. UIApplication failed to find the AppDelegate

原代碼與模板代碼相同:

-(void) testAppDelegate { 

    id yourApplicationDelegate = [[UIApplication sharedApplication] delegate]; 
    STAssertNotNil(yourApplicationDelegate, @"UIApplication failed to find the AppDelegate"); 
} 
+1

是的,您的應用程序源應該包含在測試目標的編譯源構建階段。你能發佈你的單元測試代碼和實際錯誤嗎? – 2010-07-08 19:28:08

+0

@chrispix - 側面的問題,有沒有一種方法可以自動將所有代碼掃描到測試目標中,而無需每次都明確添加它們以創建新類? – groundhog 2010-07-09 02:28:48

+1

我不知道有什麼方法可以「自動」將其掃描到測試目標中。但是,當您使用XCode創建新類時,對話框會詢問您將其添加到哪些目標,並默認爲您上次選擇的任何目標。根據我的經驗,我添加的每個類都被添加到我的測試目標中 - 它可以是我的應用中的測試類或類,它將以某種方式進行測試。所以我的測試目標總是在該對話框中檢查。問題實際上是相反的 - 記住不要在你的應用程序目標中包含測試類。 – 2010-07-09 05:39:50

回答

0

我不能直接回答你的問題,因爲我從來沒有得到應用程序測試來使用OCUnit。我瞭解許多人使用Google Toolbox for Mac iPhone單元測試庫或GHUnit來簡化此過程。如上面鏈接的Blazing Cloud帖子所指出的,OCUnit(和GTM/GHUnit)比Rspec風格更具JUnit風格。在Pivotal中,我們幾乎所有的東西都使用了Rspec,我們希望Objective C的東西類似。因此,我們編寫了Cedar,我們有意將其設計爲與UIKit一起使用,在iOS設備上運行等等。它可以免費獲得並且是開源的;如果您對此有任何疑問,可以發送電子郵件至討論組:[email protected]

0

根據Apple的文檔,有2種單元測試。

  • 邏輯測試
  • 應用測試

應用測試工作僅在硬件設備。如果你正在使用模擬器,它將不起作用。

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

+2

Mate,這完全是從蘋果文檔複製粘貼的:_「因爲應用程序測試**可以在模擬器和設備上運行**,您還可以使用這些測試來執行硬件測試,例如獲取設備的位置您的應用程序「。因此,應用程序測試也可以在模擬器中運行,而不僅僅在設備上運行。 – 2011-11-15 12:54:17

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). 

即應用程序委託未找到預期。

問題是,當我以爲我遵循指導原則時,我沒有。顯然,應用程序測試僅在設備上運行。所以我從Simulator切換到Device(用於AppTesting目標),連接我的iPhone,然後執行Build + Run(cmd + return/enter)。應用程序自己安裝,並在幾秒鐘後退出代碼1(我猜這表示錯誤的返回代碼)。

應用後退出了,我做了SHIFT + 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,開發人員。

10

確保指定了單元測試包的BUNDLE_LOADER和TEST_HOST構建設置。

BUNDLE_LOADER = $(BUILT_PRODUCTS_DIR)/YourApp.app/YourApp 
TEST_HOST = $(BUNDLE_LOADER) 

此外,在Xcode4,許多的蘋果的指南中所描述的步驟是不需要的(例如複製的應用程序的目標)。我建議創建新的項目,包括單元測試和環顧四周。

+0

在整個下午嘗試了一切之後,終於做到了。非常感謝! – 2011-05-11 04:09:07

+0

謝謝!我還需要將我的主要目標添加爲Unit Test bundle的「Target Dependency」(目標設置 - > Build Phases)。 – 2011-07-19 17:25:14

1

我已經在這個上掉了兩次。 您需要設置BUNDLE_LOADER和TEST_HOST構建設置才能使其工作。 但這還不夠,您還需要設置Bundle Loader和Test Host。 請檢查how to implement application tests in xcode4?,該答案對我來說工作得很好。