2013-08-23 2 views
1

Использую GHUnit. Я хочу проверить IBOutlet «S свойства, такие как isHidden, delegate и т.д.Испытание модуля Свойства 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.

Почему это?

delegate Чтобы проверить свойство в IBOutlet Я попытался ниже линии:

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

Это терпит неудачу с Reason : ((testClass.textField.delegate) != nil) should be FALSE.

Что не так?

EDIT: Пробовал ниже код, который не работает.

[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

Смежные вопросы