1

我刚刚开始进行单元测试,我想知道如何正确测试 NSDocument 子类?

(void)windowControllerDidLoadNib:(NSWindowController *)aController在我的测试设置中,我可以初始化文档,但这并不能反映文档在应用程序使用时是如何设置的,特别是没有建立 IBOutlet 连接,也没有调用诸如 - 之类的关键消息。

那么获取完全初始化的 NSDocument 对象以用于测试的正确方法是什么?

4

1 回答 1

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];
}
于 2015-09-01T18:30:03.493 回答