Тестирование NSDocument
Я только начинаю с модульного тестирования, и мне интересно, как правильно протестировать подкласс NSDocument?
В моем тестовом наборе я могу инициировать документ, но это не отражает, как документ настроен, когда он используется приложением, в частности, соединения IBOutlet не выполняются, а критические сообщения, такие как - (void)windowControllerDidLoadNib:(NSWindowController *)aController
не называются.
Итак, как правильно получить полностью инициализированный объект NSDocument для использования в тестировании?
1 ответ
Вот как вы можете начать:
#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];
}