是否可以在静态方法中对OCMock进行类调用?

时间:2012-08-22 09:58:17

标签: ios unit-testing mocking ocunit ocmock

刚刚开始使用OCMock所以请耐心等待 - 我一直在查看文档和大量示例但尚未找到明确的答案 - 是否可以在静态方法中模拟init调用,例如:

+ (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 个答案:

答案 0 :(得分: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";
}