2013-04-10 74 views
2

我是新來的OCMock,我想測試一個方法是否被調用,除了我想方法是一個存根,因爲它包含其他加載方法,我不在現在的測試中測試。如何正確使用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 

我是什麼錯誤唱?

回答

2

嘗試移除此行:

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

expect該方法中,它具有磕碰它,所以stub是不必要的副作用。我懷疑發生了什麼事是你的stub錄音機在expect錄音機有機會匹配它之前吞嚥了調用。

+0

就是這樣!再次感謝您的解釋。 – 2013-04-10 23:00:43