我正在尝试用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;
}
}
答案 0 :(得分:2)
从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);
所以,在运行这段特殊代码之后。此处不调用实际的类方法,并返回stubbed值。我希望这会对你有所帮助。