【问题标题】:Mock internal calls of a another class methods模拟另一个类方法的内部调用
【发布时间】:2014-08-20 09:18:14
【问题描述】:

我正在尝试使用 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;
 }
}

【问题讨论】:

    标签: objective-c ocmock ocmockito


    【解决方案1】:

    从 OCMock 2.1 版开始,我们可以存根类方法。更多信息请参考此链接:http://www.ocmock.org/features/

    所以,我们可以像这样对类方法存根:

    id keyChainUtilMock = [OCMockObject mockForClass:[KeyChainUtil class]];
    [[[keyChainUtilMock stub] andReturn:@"aasdf"] loadValueForKey:USER_ID];
    
    NSString* userId = [KeyChainUtil loadValueForKey:USER_ID];
    NSLog(@" stubbed value-->%@", userId);
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-02
      • 2015-07-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多