Насмешливый NSWindowController - PullRequest
       8

Насмешливый NSWindowController

0 голосов
/ 13 февраля 2012

У меня есть приложение 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;
}

1 Ответ

0 голосов
/ 19 февраля 2012

Из вашего кода не ясно, как вы ожидаете, что windowController будет указывать на mockWindowController. Вы реализовали инициализатор категории и код invokeSupersequent, как в посте Мэтта Галлахера?

Из вашего кода следует, что windowController является собственностью вашего класса флюгера. Я думаю, что самым простым подходом было бы отказаться от попыток переопределить инициализацию 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];
}
...