模拟另一个类方法的内部调用
Posted
技术标签:
【中文标题】模拟另一个类方法的内部调用【英文标题】: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;
【问题讨论】:
【参考方案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);
所以,在运行这段特定的代码之后。这里不调用实际的类方法,而是返回存根值。希望对您有所帮助。
【讨论】:
以上是关于模拟另一个类方法的内部调用的主要内容,如果未能解决你的问题,请参考以下文章