2013-08-23 115 views
1

我使用GHUnit。我想測試IBOutlet的性能,如isHiddendelegate單元測試IBOutlet的屬性

我想下面的代碼來測試myView隱藏:

- (void)testViewDidLoad 
{ 
    // Call view on viewcontroller which will load the view if not loaded 
    [testClass view]; 

    // Tests 
    testClass.myView.hidden = YES; 

    if (testClass.myView.isHidden) { 
     GHTestLog(@"Hidden"); 
    } 
    else { 
     GHTestLog(@"Not Hidden"); 
    } 
} 

這始終記錄Not Hidden,而只是記錄之前,我把它hidden = YES

這是爲什麼?

要測試IBOutletdelegate財產我想下面一行:

GHAssertNotNil(testClass.textField.delegate, @"delegate is nil."); 

它失敗Reason : ((testClass.textField.delegate) != nil) should be FALSE.

有什麼不對?

編輯: 嘗試下面的代碼不起作用。

[testClass view]; 

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" 
             bundle:[NSBundle bundleForClass:[self class]]]; 
GHAssertNotNil(storyboard, nil); 

// Tests 
GHAssertTrue(testClass.myView.isHidden, nil); // This fails 
+0

你有一個測試,驗證'testClass.myView'不是零? –

+0

@FlorianMielke你是對的。 'myView'是零。但是當我調用'[testClass view];'時,它不應該被初始化嗎?或者有什麼辦法來初始化?重點是它'IBOutlet',因此'弱'財產。 – Geek

+0

您是否在界面上使用XIB或故事板? –

回答

3

當測試包含在UIStoryboard您的看法,請確保您已添加您的故事板文件,以測試目標。

我也建議你有一個測試,驗證你的故事板已成功初始化是這樣的:

- (void)testStoryboardShouldBeInitialized 
{ 
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"NameOfStoryboard" bundle:[NSBundle bundleForClass:[self class]]]; 
    STAssertNotNil(storyboard, nil); 
} 

編輯

你首先必須初始化你的視圖控制器你想從你的故事板測試,然後你可以測試你的插座:

UIViewController *controller = [storyboard instantiateViewControllerWithIdentifier:@"ViewControllerIdentifier"]; 
[controller view]; 
GHAssertTrue(controller.myView.isHidden, nil); 

我還建議測試(在一個單獨的方法),您的視圖控制器已成功實例化。如果需要,我還會將控制器初始化移到您的setUp方法中。

+0

試過了。不工作。我發佈了我嘗試的確切代碼。 – Geek

+0

更新了我的答案。我認爲這應該可以解決你的問題。 –

0

這是因爲界面生成器上的IBTextField無法找到定義的文本屬性。

這就是你需要附加它或者從界面構建器連接文本字段到它的屬性。

(或者可能是因爲您的testClass未能指出或提供訪問textField

+1

如何在單元測試中製作IBOutlet連接? – Geek