2012-08-22 64 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类的方法和创建对象的方法。尽管如此,旧的答案仍然概述了首选的方法。 –

相关问题