2015-01-04 2 views
1

Я следую за книгой «Test-Driven iOS Development» Грэма Ли и наткнулся на этот раздел, который не совсем объяснен. Идея заключается не в создании экземпляра UIWindow в didFinishLaunchingWithOptions, а в использовании IBOutlet и привязка его к файлу xib UIWindow. Я не могу получить эту работу и не могу найти какой-либо пример в Интернете.Как выполнить модульный тест didFinishLaunchingWithOptions?

-(void)testWindowHasRootNavigationControllerAfterApplicationLaunch 
{ 
    XCTAssertEqualObjects(window.rootViewController, navigationController, @"App delegate's navigation controller should be the root VC"); 
} 

@implementation iTagNewsAppDelegateTests 
{ 
    UIWindow *window; 
    UINavigationController *navigationController; 
    AppDelegate *appDelegate; 
} 

- (void)setUp { 
    window = [UIWindow new]; 
    navigationController = [UINavigationController new]; 
    appDelegate = [AppDelegate new]; 
    appDelegate.window = window; 
    appDelegate.navigationController = navigationController; 
} 

Код:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
BrowseOverflowViewController *firstViewController = 
[[BrowseOverflowViewController alloc] initWithNibName: nil bundle: nil]; 
    TopicTableDataSource *dataSource = [[TopicTableDataSource alloc] 
        init]; 
    [dataSource setTopics: [self topics]]; 
    firstViewController.dataSource = dataSource; 
    self.navigationController.viewControllers = 
        [NSArray arrayWithObject: firstViewController]; 
    self.window.rootViewController = self.navigationController; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 

@interface BrowseOverflowAppDelegate : NSObject <UIApplicationDelegate> 
@property (nonatomic, retain) IBOutlet UIWindow *window; 
@property (nonatomic, retain) IBOutlet UINavigationController *navigationController; 
@end 

Его полный проект на GitHub. Есть ли учебник, как определить пользовательские UIWindow? большое спасибо

ответ

0

Я не читал эту книгу, но обнаружил, что смог проверить полный экземпляр моего AppDelegate. Адаптируя его к коду:

- (void) setUp { 
    //Could also use [[UIApplication sharedApplication] delegate] but I'm worried state may persist 
    iTagNewsAppDelegate* appDelegate = [[iTagNewsAppDelegate alloc] init] 
    [appDelegate application:[UIApplication sharedApplication] didFinishLaunchingWithOptions:nil]; //Couldn't find a better option than sharedApplication here, fine if application param isn't used? 
    //the rest of your setup here 
} 

Это работает в моем проекте, но я не уверен, о побочных эффектах использования sharedApplication. Вы хотите, чтобы модульный тест имел известное начальное состояние и повторное использование запущенного приложения на протяжении ваших тестов, как правило, плохо.

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