1

私のアプリデリゲートクラスには、単純なプロパティがあります

@property (strong, nonatomic) LoginAppDelegate *loginAppDelegate;

次に、ここですべてのログインビューの機能のようなアプリデリゲートをオフロードして、メインのアプリデリゲートクラスを小さく保つことができるようにします(ish)

次に、ログインアプリデリゲートで、メインナビゲーションコントローラーのビューコントローラーをプッシュするメソッドがあります

- (void)launchSomeOtherViewController {} 

苦痛な部分は、この「起動」メソッドを呼び出すViewControllerの内部にいるときです。

- (void)callBackAfterSomeHttpMethodLetsSay
{
    [self.appDelegate.loginAppDelegate launchSomeOtherViewController];
}

これをモックアウトしようとすると、アプリデリゲートのスタブが正しくないように見えます

- (void)testCallBackWithSignupTokenInvokesLaunchCompleteSignupViewControllerWithToken
{
    id mockLoginAppDelegate = [OCMockObject mockForClass:[LoginAppDelegate class]];
    id mockAppDelegate = [OCMockObject mockForClass:[AppDelegate class]];
    [[[mockAppDelegate stub] andReturn:mockLoginAppDelegate] loginAppDelegate];
    [[mockLoginAppDelegate expect] launchSomeOtherViewController];
    [self.sut callBackAfterSomeHttpMethodLetsSay];
    [mockLoginAppDelegate verify];
}

ocunitを介してこれを実行すると、通常の「予期されたメソッドが呼び出されませんでした」というエラーが発生します。

だから私の質問は私がこれをスタブする方法に関連しています-私が持っているようにログインモックを返すスタブを行うことができますか、それとも手動でゲッターに到達する必要がありますか?

4

1 に答える 1

1

mockAppDelegateテスト中のクラスに見えるようにしていないようです。追加してみてください:

[self.sut setAppDelegate:mockAppDelegate];
于 2012-06-20T14:16:05.977 に答える