2013-07-11 58 views
1

我剛開始使用單元測試,我想知道如何正確測試一個NSDocument子類?測試NSDocument

在我的測試setUp中,我可以初始化文檔,但這並不能反映應用程序使用文檔時的設置方式,特別是不會創建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]; 

正確的做法: 不要把任何東西的用戶界面到您的文檔(windowControllerDidLoadNib)如果你想對它進行測試。單一責任。怎麼樣?只實現makeWindowControllers

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

從窗口控制器,你可以訪問你的文件隨時隨地

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