2016-05-17 49 views
0

我讓我的問題變成簡單的版本。我想嘲笑NSDictionary。爲什麼OCMClassMock不創建模擬對象?

在我的測試類,我嘲笑的NSDictionary這樣:

NSDictionary* mockDict = OCMClassMock([NSDictionary class]); 
OCMStub([mockDict objectForKey:@"account_type"]).andReturn(@"Mock ACC1 account_type"); 
OCMStub([mockDict objectForKey:@"account_number"]).andReturn(@"Mock ACC1 account_number"); 

現在我打的是真正的代碼是這樣的:

首先創建我的VC的一個實例。

CTRegisterPIckAccountViewController *_sutVC; 
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle bundleForClass:[self class]]]; 
_sutVC = (CTRegisterPIckAccountViewController *)[storyboard instantiateViewControllerWithIdentifier:@"AccountListViewController"]; 

然後我打電話

[_sutVC tableView:mockTableView cellForRowAtIndexPath:mockIndexNotSelected]; 

在這個VC我在界面中使用的UITableViewDelegate,我調用這個函數:

-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    NSDictionary *account = [_accounts objectAtIndex:indexPath.row]; 
    NSString *Tmp = [account objectForKey:@"account_type"]; 

} 

但是當我把破發點,。僅在測試類中存在mockDict的實例。我得到零。我的期望是

[account objectForKey:@"account_type"] 

此方法必須返回字符串值上面我掐滅,但返回nil。

回答

0

一般來說,創建一個模擬對象並不奇蹟般地將它變爲各處使用。您需要使用某種形式的Dependency Injection。最常見的DI形式是將對象作爲參數傳遞給初始值設定項,或將其設置爲屬性。

對於OCMock,模擬類方法是一個例外:它確實調整了類方法的所有用法。但不是實例方法。

相關問題