objective-c - 模拟另一个类方法的内部调用

标签 objective-c ocmock ocmockito

我正在尝试使用ocmock学习单元测试。我发现很难从我正在进行单元测试的类中模拟另一个类的调用。

有人可以建议如何模拟调用 KeyChainUtils 类和 HttpRequest 类吗:

使用 OCMock 进行单元测试的代码:

@implementation UserProfileService {
+(BOOL) isValidUser
{
    NSString* userId = [KeyChainUtil loadValueForKey:USER_ID]; //mock this call
    bool isValidUser = NO;
    if(userId && userId.length > 0){
        NSDictionary* response = [HTTPDataService getJSONForURL:@"http://xtest.com/checkuserid" forRequestData:@{@"userid": userId}];

        if(response && response[@"valid"]){
            isValidUser = [response[@"valid"] boolValue];             
        }else{
            NSLog(@"error in connecting to server. response => %@", response);
        }
    }
    return isValidUser;
 }
}

最佳答案

从 OCMock 2.1 版开始,我们可以对类方法进行 stub 处理。请参阅此链接了解更多信息:http://www.ocmock.org/features/

因此,我们可以像这样 stub 类方法:

id keyChainUtilMock = [OCMockObject mockForClass:[KeyChainUtil class]];
[[[keyChainUtilMock stub] andReturn:@"aasdf"] loadValueForKey:USER_ID];

NSString* userId = [KeyChainUtil loadValueForKey:USER_ID];
NSLog(@" stubbed value-->%@", userId);

所以,在运行这段特定的代码之后。这里不调用实际的类方法,而是返回 stub 值。我希望这对您有帮助。

关于objective-c - 模拟另一个类方法的内部调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25401015/

相关文章:

ios - 如何模拟以 pmkpromise 作为返回类型的方法

objective-c - 使用 dispatch_async 调用测试代码

ios - 关于使用 Cocoapods 设置 OCMockito 的问题

objective-c - 在 Objective-C 中前向声明枚举

objective-c - 为什么 -[NSString 比较 :options:] return true when the strings are not equal?

objective-c - 在 NSString 的一部分周围绘制方框

ios - 如何使用 OCMockito stub 类方法?

Objective-C : (private/public properties) making a property readonly for outside class calls and readwrite for self calls

ios - OCMock [OCMAnyConstraint isProxy] : message sent to deallocated instance, 发生了什么事?

objective-c-blocks - 如何使用 OCMock 在 block 中测试异步方法