Модульное тестирование keyWindow с использованием OCUnit выдает ошибку

Я хочу протестировать окно делегата приложения в качестве ключевого окна после запуска. Поэтому я пишу следующие тесты.

- (void)setUp
{
    window = [[UIWindow alloc] init];
    appDelegate = [[FGAppDelegate alloc] init];
    appDelegate.window = window;
    appDidFinishLaunchingReturn = [appDelegate application: nil didFinishLaunchingWithOptions:nil];
}

- (void)tearDown
{
    window = nil;
    appDelegate = nil;
}
- (void)testWindowIsKeyAfterApplicationLaunch
{
    STAssertTrue(window.keyWindow, @"App delegate's window should be key.");
}

В моем приложении делегируйте метод application:didFinishLaunchingWithOptions:

  ...
  self.window.rootViewController = self.tabBarController;
  [self.window makeKeyAndVisible];
  return YES;
}

Тест провалился и сказал мне, что window.keyWindow должно быть истинным. Что-то не так? Как исправить тест?


person newguy    schedule 30.08.2013    source источник


Ответы (1)


Я предполагаю, что это проблема, аналогичная моему вопросу модульного теста iOS: Как установить/обновить/проверить firstResponder? Фактическая активация ключевого окна, вероятно, происходит в основном цикле выполнения. Чтобы дать ему возможность запуститься, попробуйте вызвать это в своем тесте:

- (void)runForShortTime
{
    [[NSRunLoop currentRunLoop] runUntilDate:[NSDate date]];
}
person Jon Reid    schedule 30.08.2013
comment
Спасибо за ваш ответ. Я действительно смотрел ваше видео о модульном тестировании. Вернемся к вопросу, где вы предлагаете мне поместить метод? Я немного смущен тем, как это повлияет на тест. - person newguy; 30.08.2013
comment
Вызовите -runForShortTime перед проверкой ключевого окна. - person Jon Reid; 30.08.2013