2012-08-22 83 views
0

剛剛開始使用OCMock,所以對我很感興趣 - 我一直在瀏覽文檔和加載示例,但還沒有找到明確的答案 - 是否可以在靜態方法中模擬出一個init調用,例如:是否有可能通過靜態方法OCMock類調用?

+ (NSString *)addHeaderToRequest:(NSString *)request namespace:(NSString *)namespace 
{   
    CTTeleInfo *netInfo = [[CTTeleInfo alloc] init]; 
    CTCarrier *carrier = [netInfo subscriberCell; 
    NSString *mobileNetwork = [carrier carrierName]; 
    if (mobileNetwork == nil) 
     mobileNetwork = @"Unknown"; 

} 

是否可以在不更改代碼的情況下模擬CTTeleInfo對象?

回答

1

這不是OCMock可以幫到你的東西。即使它可以模擬類方法,但仍然不得不將創建的netInfo對象提取到模擬可以覆蓋的方法中。

如果你可以改變的代碼,明顯的解決方案是這樣的:

+ (NSString *)addHeaderToRequest:(NSString *)request namespace:(NSString *)namespace 
{ 
    [self addHeaderToRequest:request namespace:namespace carrier:[[CTTeleInfo alloc] init]]; 
} 

+ (NSString *)addHeaderToRequest:(NSString *)request namespace:(NSString *)namespace carrier:(CTCarrier *)carrier 
{ 
    NSString *mobileNetwork = [carrier carrierName]; 
    if (mobileNetwork == nil) 
     mobileNetwork = @"Unknown"; 
} 
+1

注意與OCMock的當前版本,現在可以stub類的方法和創建對象的方法。儘管如此,舊的答案仍然概述了首選的方法。 –

相關問題