2013-07-11 3 views
1

Я только начинаю с модульного тестирования, и мне интересно, как правильно протестировать подкласс NSDocument?Тестирование NSDocument

В моем тестовом набореUp Я могу инициализировать документ, но это не отражает способ установки документа, когда он используется приложением, в частности, соединения IBOutlet не выполняются, и критические сообщения, такие как - (void)windowControllerDidLoadNib:(NSWindowController *)aController, не вызываются ,

Итак, каков правильный способ получить полностью инициализированный объект NSDocument для использования в тестировании?

ответ

0

Это, как вы можете начать:

#import <Cocoa/Cocoa.h> 
#import <XCTest/XCTest.h> 
#import "Document.h" 

@interface DocumentTests : XCTestCase { 
    Document *document; 
    NSWindowController *controller 
} 
@end 

@implementation DocumentTests 

- (void)setUp { 
    document = [[Document alloc] init]; 
    [document makeWindowControllers]; 
    controller = (NSWindowController *)[document windowControllers][0]; 
} 

- (void)testLoadingWindow 
{ 
    XCTAssertNotNil(controller.window); 
} 

- (void)testTextFieldOutletsIsConnected 
{ 
    [controller window]; //kick off window loading 
    XCTAssertNotNil(document.textField); 
} 
    //For asynchronous testing use XCTestExpectation 
    //[self expectationWithDescription:@"Expectations"]; 
    //[self waitForExpectationsWithTimeout:3.0 handler:nil]; 

Правильный подход: Не помещайте материал UI в документ (windowControllerDidLoadNib), если вы хотите, чтобы проверить его. Единая ответственность. Как? Просто реализовать makeWindowControllers

- (void)makeWindowControllers 
{ 
    CustomWindowController *controller = [[CustomWindowController alloc] init]; 
    [self addWindowController:controller]; 
} 

От контроллера окна вы можете получить доступ к документу в любое время

- (CustomDocument *)document 
{ 
    return [self document]; 
}