2

私はOCMockが初めてで、メソッドが呼び出されたかどうかをテストしようとしていますが、現在のテストでテストしたくない他のロードメソッドが含まれているため、メソッドをスタブにしたいのです。

- (void)setUp
{
    self.rootViewController = [[RootViewController alloc] init];
}

- (void)tearDown
{
   self.rootViewController = nil;
}

- (void)test_ViewDidLoad_DidCallLoadChildViewControllers
{
    id mockRootViewController = [OCMockObject partialMockForObject:self.rootViewController];

    [(RootViewController*)[mockRootViewController stub] loadChildViewControllers];
    [(RootViewController*)[mockRootViewController stub] updateMainNavigation];

    [[mockRootViewController expect] loadChildViewControllers];

    // Force the view to load
    self.rootViewController.view;

    [mockRootViewController verify];
}

そして、呼び出されるメソッドは次のとおりです。

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self loadChildViewControllers];
    [self updateMainNavigation];
}

なんらかの理由で、テストが呼び出されていないかのように失敗しています (ただし、ステップスルーして、呼び出されていること、およびスタブであることを確認できます。

エラーは次のとおりです。

OCPartialMockObject[RootViewController]: expected method was not invoked: loadChildViewControllers

私は何が欠けていますか?

4

1 に答える 1

2

この行を削除してみてください:

[(RootViewController*)[mockRootViewController stub] loadChildViewControllers];

そのメソッドを使用するexpectと、スタブ化の副作用があるため、stubは不要です。レコーダーが呼び出しを一致させるstub前に、レコーダーが呼び出しを飲み込んでいると思われます。expect

于 2013-04-10T17:20:44.257 に答える