我刚刚开始进行单元测试,我想知道如何正确测试 NSDocument 子类?
(void)windowControllerDidLoadNib:(NSWindowController *)aController
在我的测试设置中,我可以初始化文档,但这并不能反映文档在应用程序使用时是如何设置的,特别是没有建立 IBOutlet 连接,也没有调用诸如 - 之类的关键消息。
那么获取完全初始化的 NSDocument 对象以用于测试的正确方法是什么?
我刚刚开始进行单元测试,我想知道如何正确测试 NSDocument 子类?
(void)windowControllerDidLoadNib:(NSWindowController *)aController
在我的测试设置中,我可以初始化文档,但这并不能反映文档在应用程序使用时是如何设置的,特别是没有建立 IBOutlet 连接,也没有调用诸如 - 之类的关键消息。
那么获取完全初始化的 NSDocument 对象以用于测试的正确方法是什么?
您可以这样开始:
#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];
}