博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OCMock学习笔记
阅读量:6930 次
发布时间:2019-06-27

本文共 2725 字,大约阅读时间需要 9 分钟。

hot3.png

最近抽空了解了一下objective-c上的一个比较好用的单体测试框架OCMock。(记得挺早的时候就看到过,不过一直没时间去仔细了解,这次就抽空试用了一下)

OCMock是在编写objective-c的单元测试能够在不影响其他关联代码的情况下为测试对象(类)提供预期的测试数据。对Java开发人员来说,这个类库其实与Java开发中的mockito是同一个用途的。

OCMock官网:

下面举几个不同的数据注入方式。 #Settings

@interface Settings : NSObject+(Settings *)sharedInstance;@property(nonatomic, copy) NSString *email;@end@implementation Settings//...省略- (Settings *)init{    self = [super init];    if (self != nil) {        self.email = [ISRKeyChainUtil valueForKey:KEYCHAIN_EMAIL];    }    return self;}//...省略@end

#ISRKeyChainUtil

@interface ISRKeyChainUtil : NSObject/**always return @"HelloWorld"**/+ (id)valueForKey:(NSString *)key;@end

#UnitTest Code

- (void)testSharedInstance{    //[Settings sharedInstance] like java singleton class    id mockSettingsToTest = OCMPartialMock([Settings sharedInstance]);    OCMStub([mockSettingsToTest email]).andReturn(@"multiuser@multi.isr.co.jp");    Settings *settings = [Settings sharedInstance];    AssertStringEqual(settings.email,@"multiuser@multi.isr.co.jp");    [mockSettingsToTest stopMocking];}- (void)testDifferentInstance{    Settings *settingsWillMock = [[Settings alloc] init];    Settings *settingsNormal = [[Settings alloc] init];    id mockSettingsToTest = OCMPartialMock(settingsWillMock);    OCMStub([mockSettingsToTest email]).andReturn(@"multiuser@multi.isr.co.jp");    AssertStringEqual(settingsWillMock.email,@"multiuser@multi.isr.co.jp");    AssertStringEqual(settingsNormal.email,@"HelloWorld");    [mockSettingsToTest stopMocking];}- (void)testClassMock{    id mockISRKeyChainUtilToTest = OCMClassMock([ISRKeyChainUtil class]);    OCMStub(ClassMethod([mockISRKeyChainUtilToTest valueForKey:@"email"])).andReturn(@"multiuser@multi.isr.co.jp");    Settings *settings = [Settings sharedInstance];    AssertStringEqual(settings.email, @"multiuser@multi.isr.co.jp");    [mockISRKeyChainUtilToTest stopMocking];}//利用反射的方式来获取参数数据并传递指定的Return值回去- (id)mockHttpClient {    U2FHttpClient *httpClient = [[U2FHttpClient alloc] init];    id mockU2FHttpClient = OCMPartialMock(httpClient);    ClientRegistrationRequest __block *clientRegistrationRequest = [MockDataUtil clientRegistrationRequest_Success];    OCMStub([mockU2FHttpClient retrieveRegistrationRequestWithClientIdentifierRequest:[OCMArg isKindOfClass:[ClientIdentifierRequest class]]])        .andDo(^(NSInvocation *invocation) {          __unsafe_unretained ClientIdentifierRequest *clientRequest;          [invocation getArgument:&clientRequest atIndex:2];            NSLog(@"1:%@",clientRequest);          NSLog(@"%@", clientRegistrationRequest);          [invocation setReturnValue:&clientRegistrationRequest];        });    return mockU2FHttpClient;}

转载于:https://my.oschina.net/destroy001/blog/522547

你可能感兴趣的文章
Linux基础--获取帮助信息
查看>>
RAID深入讲解--文件系统回顾(1)
查看>>
Python3.x和Python2.x的区别
查看>>
360项目-12
查看>>
针对Elasticsearch的开源分析及可视化平台——Kibana
查看>>
理解、学习与使用 JAVA 中的 OPTIONAL
查看>>
SHELL快捷键
查看>>
我的友情链接
查看>>
Mac OS 环境下 安装 Asp.Net及使用Yeoman 创建Asp.Net 项目
查看>>
C#开发人员应该知道的13件事情
查看>>
log4cplus日志库的安装使用
查看>>
【Spring Boot】18.集成redis
查看>>
java特训第二课
查看>>
form表单提交,后台获取不到参数值问题(前题是页面参数正常没有错误)
查看>>
apache druid 迁移过程(hdfs)insert-segment-to-db
查看>>
电子邮件.NET控件MailBee.NET Objects v11.0发布丨附下载
查看>>
利用LMAP免费搭建WordPress博客
查看>>
Hbase查询小结:先缩小范围,再使用正则进行过滤
查看>>
linux基础,正则,sed
查看>>
MySQL不定时总结
查看>>