我有一个Mac应用程序,实际上是一个NSStatusItem,我正在尝试测试它的首选项窗口。我将此代码用作模型,因为它的工作方式与我的代码非常相似,只是我的窗口被初始化并显示在applicationDidFinishLaunching以外的函数中。http://bit.ly/wH6QOk
我收到错误:未调用预期的方法:窗口
我不明白为什么会这样。下面是我的测试代码:
-(void)testPreferencesInit {
mockWindowController = [OCMockObject mockForClass:[NSWindowController class]];
id mockWindow = [OCMockObject mockForClass:[NSWindow class]];
[[[mockWindowController expect] andReturn:mockWindow] window];
[[mockWindow expect] makeKeyAndOrderFront:weathervane];
[weathervane showPreferences:nil];
[mockWindowController verify];
[mockWindow verify];
id windowController;
object_getInstanceVariable(weathervane, "windowController", (void **)&windowController);
GHAssertEqualObjects(windowController, mockWindowController,
@"windowController not set on appDelegate");
GHAssertTrue([[windowController windowNibName] isEqualToString:@"Preferences"], @"Window Controller nib name not set");
object_setInstanceVariable(weathervane, "windowController", nil);
mockWindowController = nil;
}发布于 2012-02-19 13:26:22
从您的代码中并不清楚您希望windowController如何指向mockWindowController。你是否像Matt Gallagher的文章中那样实现了类别初始化器和invokeSupersequent代码?
从您的代码中可以看出,windowController是weathervane类的一个属性。我认为最简单的方法是避免尝试覆盖NSWindowController的初始化,而只是将你的模拟传递给你的控制器:
-(void)testPreferencesInit {
mockWindowController = [OCMockObject mockForClass:[NSWindowController class]];
id mockWindow = [OCMockObject mockForClass:[NSWindow class]];
[[[mockWindowController expect] andReturn:mockWindow] window];
[[mockWindow expect] makeKeyAndOrderFront:weathervane];
weathervane.windowController = mockWindowController;
[weathervane showPreferences:nil];
[mockWindowController verify];
[mockWindow verify];
}https://stackoverflow.com/questions/9263283
复制相似问题