0

私はMacアプリケーション、実際にはNSStatusItemを持っており、その環境設定ウィンドウをテストしようとしています。このコードは、ウィンドウが初期化され、applicationDidFinishLaunching以外の関数で表示されることを除けば、コードとほとんど同じように機能するため、モデルとして使用しました。 http://bit.ly/wH6QOk

エラーが発生します:予期されたメソッドが呼び出されません:window

なぜこれが起こるのか理解できません。これが私のテストコードです:

-(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;
}
4

1 に答える 1

0

windowControllerをどのように指すかは、コードからは明らかではありませんmockWindowControllerinvokeSupersequentMatt Gallagherの投稿のように、カテゴリ初期化子とコードを実装しましたか?

それ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];
}
于 2012-02-19T05:26:21.600 に答える