2014-01-05 40 views
1

我想單元測試自定義單元是否註冊了tableView如何測試自定義單元格是否已使用tableView註冊?

-(void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    UINib *nib = [UINib nibWithNibName:@"FTStatsCellView" bundle:nil]; 
    [[self tableView] registerNib:nib forCellReuseIdentifier:@"FTStatsCellView"]; 
} 

單元測試:

-(void)testIfCustomCellsAreRegisteredToTable 
{ 
    [viewController viewDidLoad]; 
    FTStatsCellView *cell = [[viewController tableView] dequeueReusableCellWithIdentifier:@"FTStatsCellView"]; 
    XCTAssertNotNil(cell, @"Custom cell FTStatsCellView is not registered with the table."); 
} 

測試失敗並顯示消息:

[FTStatsViewControllerTests testIfCustomCellsAreRegisteredToTable] 失敗:在束無法加載NIB:「一個NSBundle (已加載)',名稱爲'FTStatsCellView'

有什麼建議嗎?感謝

更新

如果我點擊該項目,從沒有到應用程序更改test target的目標,那麼它的工作原理。

enter image description here

但是,這有一個應用程序在模擬器我要運行單元測試每次運行的副作用。

enter image description here

有什麼建議嗎?

+1

您是否將筆尖包含在測試目標中? – Wain

+0

看來我有一個類似的問題,因爲在這裏:http://stackoverflow.com/questions/1879247/why-cant-code-inside-unit-tests-find-bundle-resources但不知道如何將路徑與'nibWithNibName'。 – Houman

+0

Btw xib文件已經檢查了測試目標成員資格。它包含在測試目標的'copy bundle resources'中。我卡住了...... – Houman

回答

1

設置目標爲測試目標指定BUNDLE_LOADER和TEST_HOST。運行單元測試時,這是必要的順序如下:

  1. Xcode中啓動您的應用在模擬器(或設備上,但我從來沒有運行設備單元測試)
  2. Xcode中注入測試目標爲運行應用
  3. Xcode中調用所有測試
  4. Xcode中退出你的應用程序

這一切是必要的,關於可可觸摸的之上運行單元測試 - 尤其是,任何涉及一個視圖控制器加載其視圖層次結構。

+0

感謝Jon的回覆。不幸的是,這個技巧並沒有真正幫助。它和以前一樣是一個問題。不過,我發現了一個問題,如果你可以閱讀這個問題的更新。 – Houman

+0

我會更加強調這一點:_never_ call'viewDidLoad'。調用運行時用於報告對象生命週期的方法不適合您。由運行時調用'viewDidLoad',因爲視圖_did_加載。 – matt

+0

感謝@matt,但即使'[viewController view]'也不能解決實際問題。請參閱更新的問題。 – Houman

相關問題