SlideShare a Scribd company logo
1 of 15
Mock'n'StubMock'n'Stub
OCMock, OCMockito, Nocilla, OHHTTPStubs Sandboxи немногоOCMock, OCMockito, Nocilla, OHHTTPStubs Sandboxи немного
Пирожок Без НиктоПирожок Без Никто
• Создавать дополнительные объектыСоздавать дополнительные объекты
• " "Создавать временную реализацию протокола" "Создавать временную реализацию протокола
• Оставлять затычкиОставлять затычки #ifdef DEBUG ...#ifdef DEBUG ...
• Всякие радости с бэкэндомВсякие радости с бэкэндом
Вот эти ребятаВот эти ребята
• OCMockOCMock
• OCMockitoOCMockito
• NocillaNocilla
• OHHTTPStubsOHHTTPStubs
• Sandboxи немного Sandboxи немного
Два брата-акробатаДва брата-акробата
• mock-Создавать объекты для классовmock-Создавать объекты для классов
OCMClassMockOCMClassMock((aClassaClass))
MKTMockMKTMock((aClassaClass))
• mock-Создавать объекты для протоколовmock-Создавать объекты для протоколов
OCMProtocolMockOCMProtocolMock((aProtocolaProtocol))
MKTMockProtocolMKTMockProtocol((aProtocolaProtocol))
• OCMockitoУ есть дополнительные методыOCMockitoУ есть дополнительные методы
MKTMockObjectAndProtocolMKTMockObjectAndProtocol((aClassaClass,, aProtocolaProtocol))
MKTMockProtocolWithoutOptionalsMKTMockProtocolWithoutOptionals((aProtocolaProtocol))
• OCMockУ есть дополнительные методыOCMockУ есть дополнительные методы
OCMStrictClassMockOCMStrictClassMock((aClassaClass))
OCMStrictProtocolMockOCMStrictProtocolMock((aProtocolaProtocol))
OCMPartialMockOCMPartialMock((aObjectaObject))
OCMObserverMockOCMObserverMock()()
Stubbing methodsStubbing methods
idid<ContentProviderProtocol> contentProvider = ...<ContentProviderProtocol> contentProvider = ...
OCMStubOCMStub([contentProvider([contentProvider loadSomeValuesloadSomeValues]).]).andReturnandReturn((@[@1, @3, @2]@[@1, @3, @2]););
[[MKTGivenMKTGiven([contentProvider([contentProvider loadSomeValuesloadSomeValues])]) willReturnwillReturn::@[@1, @3, @2]@[@1, @3, @2]];];
OCMockitoOCMockito
--willReturnwillReturn%primitiveTypeName%:aValue%primitiveTypeName%:aValue
--willReturnStructwillReturnStruct:aStructPointer:aStructPointer objCTypeobjCType:aType:aType
--willDowillDo:aBlock:aBlock
--willThrowwillThrow:anException:anException
OCMockOCMock
..andReturnandReturn(aValue)(aValue)
..andThrowandThrow(anException)(anException)
..andPostandPost(aNotification)(aNotification)
..andCallandCall(anObject, aSelector)(anObject, aSelector)
..andDoandDo(aBlock)(aBlock)
..andForwardToRealObjectandForwardToRealObject()()
Chaining stub actionsChaining stub actions
OCMStubOCMStub([contentProvider([contentProvider loadSomeValuesloadSomeValues]).]).andReturnandReturn((@[@1, @3,@[@1, @3,
@2]@2]).).andThrowandThrow((willThrowwillThrow:anException);:anException);
[[[[MKTGivenMKTGiven([contentProvider([contentProvider loadSomeValuesloadSomeValues])]) willReturnwillReturn::@[@1, @3, @2]@[@1, @3, @2]]]
willThrowwillThrow:anException];:anException];
Advanced stubbing methodsAdvanced stubbing methods
NSMutableArrayNSMutableArray *mockArray = ...*mockArray = ...
OCMStubOCMStub([mockArray([mockArray addObject:@1addObject:@1]);]);
OCMArgOCMArg *arg =*arg = [[OCMArgOCMArg isKindOfClassisKindOfClass:[:[NSStringNSString classclass]];]];
OCMStubOCMStub([mockArray([mockArray addObjectaddObject:arg]).:arg]).andThrowandThrow(anException);(anException);
OCMArgOCMArg
--isNilisNil
--isNotNilisNotNil
--isNotEqualisNotEqual:aValue:aValue
--isKindOfClassisKindOfClass:aClass:aClass
--checkWithSelectorcheckWithSelector:aSelector:aSelector onObjectonObject:anObject:anObject
--checkWithBlockcheckWithBlock:^:^BOOLBOOL((idid value)blockvalue)block
[[MKTGivenMKTGiven([mockArray([mockArray containsObjectcontainsObject::startsWithstartsWith((@"tes"@"tes")]))]) willReturnBoolwillReturnBool::YESYES];];
Verifying interactionsVerifying interactions
NSMutableArrayNSMutableArray *mockArray = ...*mockArray = ...
[mockArray[mockArray removeObjectremoveObject::@"This is a test"@"This is a test"];];
[[MKTVerifyMKTVerify(mockArray)(mockArray) removeObjectremoveObject::startsWithstartsWith((@"This is"@"This is")];)];
OCMVerifyOCMVerify([mockArray([mockArray removeObjectremoveObject::startsWithstartsWith((@"This is"@"This is")]);)]);
OCMExpectOCMExpect([mockArray([mockArray removeObjectremoveObject::startsWithstartsWith((@"This is"@"This is")]);)]);
OCMExpectOCMExpect([mockArray([mockArray removeAllObjectsremoveAllObjects]);]);
......
OCMVerifyAllOCMVerifyAll(classMock)(classMock)
NocillaNocilla
+ (+ (voidvoid)setUp)setUp
{{
[[[[LSNocillaLSNocilla sharedInstancesharedInstance]] startstart];];
}}
- (- (voidvoid)setUp)setUp
{{
[[[[LSNocillaLSNocilla sharedInstancesharedInstance]] clearStubsclearStubs];];
}}
+ (+ (voidvoid)tearDown)tearDown
{{
[[[[LSNocillaLSNocilla sharedInstancesharedInstance]] stopstop];];
}}
Stubbing requestsStubbing requests
stubRequeststubRequest((@"GET"@"GET",, @"http://mockingbird.getsandbox.com/selectedColor"@"http://mockingbird.getsandbox.com/selectedColor"))
..withHeaderswithHeaders((@{@{@"Accept"@"Accept":: @"application/json"@"application/json"}}))
..andReturnandReturn((200200))
..withHeaderswithHeaders((@{@{@"Content-Type"@"Content-Type":: @"application/json"@"application/json"}}))
..withBodywithBody((@"{"selectedColor":[1, 0, 0, 1]}"@"{"selectedColor":[1, 0, 0, 1]}"););
andReturnRawResponseandReturnRawResponse(aData);(aData);
andFailWithErrorandFailWithError(anError);(anError);
OHHTTPStubsOHHTTPStubs
[[OHHTTPStubsOHHTTPStubs stubRequestsPassingTeststubRequestsPassingTest:^:^BOOLBOOL((NSURLRequestNSURLRequest *request) {*request) {
......
returnreturn isRequestAcceptedByStub;isRequestAcceptedByStub;
}} withStubResponsewithStubResponse:^:^OHHTTPStubsResponseOHHTTPStubsResponse*(*(NSURLRequestNSURLRequest *request) {*request) {
returnreturn httpStubsResponse;httpStubsResponse;
}];}];
OHHTTPStubsResponseOHHTTPStubsResponse
++ responseWithDataresponseWithData::statusCode:headersstatusCode:headers::
++ responseWithFileAtPathresponseWithFileAtPath::statusCode:headersstatusCode:headers::
++ responseWithErrorresponseWithError::
++ responseWithJSONObjectresponseWithJSONObject::statusCodestatusCode::headersheaders::
++ responseWithHTTPMessageDataresponseWithHTTPMessageData::
++ responseNamed:inBundleresponseNamed:inBundle::
SandboxSandbox
Всем спасибо за внимание!Всем спасибо за внимание!
• OCMock -OCMock - http://ocmock.org/http://ocmock.org/
• OCMockito -OCMockito - https://github.com/jonreid/OCMockitohttps://github.com/jonreid/OCMockito
• Nocilla -Nocilla - https://github.com/luisobo/Nocillahttps://github.com/luisobo/Nocilla
• OHHTTPStubs -OHHTTPStubs -
https://github.com/AliSoftware/OHHTTPStubshttps://github.com/AliSoftware/OHHTTPStubs
• Sandbox -Sandbox - https://getsandbox.com/https://getsandbox.com/

More Related Content

Viewers also liked

Are Top Web Sites Good For Everybody?
Are Top Web Sites Good For Everybody?Are Top Web Sites Good For Everybody?
Are Top Web Sites Good For Everybody?hiddengemtoday1
 
Work Resume Dromerick 2016
Work Resume Dromerick 2016Work Resume Dromerick 2016
Work Resume Dromerick 2016Laura Dromerick
 
Mga teorya at tungkulin ng wikang filipino
Mga teorya at tungkulin ng wikang filipinoMga teorya at tungkulin ng wikang filipino
Mga teorya at tungkulin ng wikang filipinocessai alagos
 
Datix Handler Training manual
Datix Handler Training manualDatix Handler Training manual
Datix Handler Training manualOla Hill
 
Стратегия тестирования - больше чем просто план
Стратегия тестирования - больше чем просто планСтратегия тестирования - больше чем просто план
Стратегия тестирования - больше чем просто планIT61
 
Streaming Music in 2016
Streaming Music in 2016Streaming Music in 2016
Streaming Music in 2016Kern Elliott
 
Thiết kế khu vui chơi trẻ em
Thiết kế khu vui chơi trẻ emThiết kế khu vui chơi trẻ em
Thiết kế khu vui chơi trẻ emnoithatphangia
 
AdvancedTdd
AdvancedTddAdvancedTdd
AdvancedTddjlink
 

Viewers also liked (11)

Question 4
Question 4Question 4
Question 4
 
Are Top Web Sites Good For Everybody?
Are Top Web Sites Good For Everybody?Are Top Web Sites Good For Everybody?
Are Top Web Sites Good For Everybody?
 
Facebook
FacebookFacebook
Facebook
 
Work Resume Dromerick 2016
Work Resume Dromerick 2016Work Resume Dromerick 2016
Work Resume Dromerick 2016
 
Mga teorya at tungkulin ng wikang filipino
Mga teorya at tungkulin ng wikang filipinoMga teorya at tungkulin ng wikang filipino
Mga teorya at tungkulin ng wikang filipino
 
Datix Handler Training manual
Datix Handler Training manualDatix Handler Training manual
Datix Handler Training manual
 
Стратегия тестирования - больше чем просто план
Стратегия тестирования - больше чем просто планСтратегия тестирования - больше чем просто план
Стратегия тестирования - больше чем просто план
 
Advert research
Advert researchAdvert research
Advert research
 
Streaming Music in 2016
Streaming Music in 2016Streaming Music in 2016
Streaming Music in 2016
 
Thiết kế khu vui chơi trẻ em
Thiết kế khu vui chơi trẻ emThiết kế khu vui chơi trẻ em
Thiết kế khu vui chơi trẻ em
 
AdvancedTdd
AdvancedTddAdvancedTdd
AdvancedTdd
 

Similar to Mock'n'Stub Tools for iOS and macOS Testing

Coqによる証明駆動開発
Coqによる証明駆動開発Coqによる証明駆動開発
Coqによる証明駆動開発Hiroki Mizuno
 
Process Doppelgänging
Process Doppelgänging Process Doppelgänging
Process Doppelgänging KarlFrank99
 
[NDC2017] 딥러닝으로 게임 콘텐츠 제작하기 - VAE를 이용한 콘텐츠 생성 기법 연구 사례
[NDC2017] 딥러닝으로 게임 콘텐츠 제작하기 - VAE를 이용한 콘텐츠 생성 기법 연구 사례[NDC2017] 딥러닝으로 게임 콘텐츠 제작하기 - VAE를 이용한 콘텐츠 생성 기법 연구 사례
[NDC2017] 딥러닝으로 게임 콘텐츠 제작하기 - VAE를 이용한 콘텐츠 생성 기법 연구 사례Hwanhee Kim
 
CBDW2014 - MockBox, get ready to mock your socks off!
CBDW2014 - MockBox, get ready to mock your socks off!CBDW2014 - MockBox, get ready to mock your socks off!
CBDW2014 - MockBox, get ready to mock your socks off!Ortus Solutions, Corp
 
Thinking Outside The [Sand]Box
Thinking Outside The [Sand]BoxThinking Outside The [Sand]Box
Thinking Outside The [Sand]BoxMichael Genkin
 
Invoke-CradleCrafter: Moar PowerShell obFUsk8tion & Detection (@('Tech','niqu...
Invoke-CradleCrafter: Moar PowerShell obFUsk8tion & Detection (@('Tech','niqu...Invoke-CradleCrafter: Moar PowerShell obFUsk8tion & Detection (@('Tech','niqu...
Invoke-CradleCrafter: Moar PowerShell obFUsk8tion & Detection (@('Tech','niqu...Daniel Bohannon
 
Build your own embedded linux distributions by yocto project
Build your own embedded linux distributions by yocto projectBuild your own embedded linux distributions by yocto project
Build your own embedded linux distributions by yocto projectYen-Chin Lee
 
Coq to Rubyによる証明駆動開発@名古屋ruby会議02
Coq to Rubyによる証明駆動開発@名古屋ruby会議02Coq to Rubyによる証明駆動開発@名古屋ruby会議02
Coq to Rubyによる証明駆動開発@名古屋ruby会議02Hiroki Mizuno
 
MongoUK 2011 - Rplacing RabbitMQ with MongoDB
MongoUK 2011 - Rplacing RabbitMQ with MongoDBMongoUK 2011 - Rplacing RabbitMQ with MongoDB
MongoUK 2011 - Rplacing RabbitMQ with MongoDBBoxed Ice
 

Similar to Mock'n'Stub Tools for iOS and macOS Testing (11)

Coqによる証明駆動開発
Coqによる証明駆動開発Coqによる証明駆動開発
Coqによる証明駆動開発
 
Process Doppelgänging
Process Doppelgänging Process Doppelgänging
Process Doppelgänging
 
[NDC2017] 딥러닝으로 게임 콘텐츠 제작하기 - VAE를 이용한 콘텐츠 생성 기법 연구 사례
[NDC2017] 딥러닝으로 게임 콘텐츠 제작하기 - VAE를 이용한 콘텐츠 생성 기법 연구 사례[NDC2017] 딥러닝으로 게임 콘텐츠 제작하기 - VAE를 이용한 콘텐츠 생성 기법 연구 사례
[NDC2017] 딥러닝으로 게임 콘텐츠 제작하기 - VAE를 이용한 콘텐츠 생성 기법 연구 사례
 
CBDW2014 - MockBox, get ready to mock your socks off!
CBDW2014 - MockBox, get ready to mock your socks off!CBDW2014 - MockBox, get ready to mock your socks off!
CBDW2014 - MockBox, get ready to mock your socks off!
 
Thinking Outside The [Sand]Box
Thinking Outside The [Sand]BoxThinking Outside The [Sand]Box
Thinking Outside The [Sand]Box
 
Rubygems And You
Rubygems And YouRubygems And You
Rubygems And You
 
Invoke-CradleCrafter: Moar PowerShell obFUsk8tion & Detection (@('Tech','niqu...
Invoke-CradleCrafter: Moar PowerShell obFUsk8tion & Detection (@('Tech','niqu...Invoke-CradleCrafter: Moar PowerShell obFUsk8tion & Detection (@('Tech','niqu...
Invoke-CradleCrafter: Moar PowerShell obFUsk8tion & Detection (@('Tech','niqu...
 
Splash
SplashSplash
Splash
 
Build your own embedded linux distributions by yocto project
Build your own embedded linux distributions by yocto projectBuild your own embedded linux distributions by yocto project
Build your own embedded linux distributions by yocto project
 
Coq to Rubyによる証明駆動開発@名古屋ruby会議02
Coq to Rubyによる証明駆動開発@名古屋ruby会議02Coq to Rubyによる証明駆動開発@名古屋ruby会議02
Coq to Rubyによる証明駆動開発@名古屋ruby会議02
 
MongoUK 2011 - Rplacing RabbitMQ with MongoDB
MongoUK 2011 - Rplacing RabbitMQ with MongoDBMongoUK 2011 - Rplacing RabbitMQ with MongoDB
MongoUK 2011 - Rplacing RabbitMQ with MongoDB
 

Recently uploaded

Bridge Fight Board by Daniel Johnson dtjohnsonart.com
Bridge Fight Board by Daniel Johnson dtjohnsonart.comBridge Fight Board by Daniel Johnson dtjohnsonart.com
Bridge Fight Board by Daniel Johnson dtjohnsonart.comthephillipta
 
FULL ENJOY - 9953040155 Call Girls in Mahipalpur | Delhi
FULL ENJOY - 9953040155 Call Girls in Mahipalpur | DelhiFULL ENJOY - 9953040155 Call Girls in Mahipalpur | Delhi
FULL ENJOY - 9953040155 Call Girls in Mahipalpur | DelhiMalviyaNagarCallGirl
 
FULL ENJOY - 9953040155 Call Girls in Gandhi Vihar | Delhi
FULL ENJOY - 9953040155 Call Girls in Gandhi Vihar | DelhiFULL ENJOY - 9953040155 Call Girls in Gandhi Vihar | Delhi
FULL ENJOY - 9953040155 Call Girls in Gandhi Vihar | DelhiMalviyaNagarCallGirl
 
Delhi Room Call Girls : ☎ 8527673949, Low rate Call girl service
Delhi Room Call Girls : ☎ 8527673949, Low rate Call girl serviceDelhi Room Call Girls : ☎ 8527673949, Low rate Call girl service
Delhi Room Call Girls : ☎ 8527673949, Low rate Call girl serviceashishs7044
 
FULL ENJOY - 9953040155 Call Girls in New Ashok Nagar | Delhi
FULL ENJOY - 9953040155 Call Girls in New Ashok Nagar | DelhiFULL ENJOY - 9953040155 Call Girls in New Ashok Nagar | Delhi
FULL ENJOY - 9953040155 Call Girls in New Ashok Nagar | DelhiMalviyaNagarCallGirl
 
FULL ENJOY - 9953040155 Call Girls in Noida | Delhi
FULL ENJOY - 9953040155 Call Girls in Noida | DelhiFULL ENJOY - 9953040155 Call Girls in Noida | Delhi
FULL ENJOY - 9953040155 Call Girls in Noida | DelhiMalviyaNagarCallGirl
 
Pragati Maidan Call Girls : ☎ 8527673949, Low rate Call Girls
Pragati Maidan Call Girls : ☎ 8527673949, Low rate Call GirlsPragati Maidan Call Girls : ☎ 8527673949, Low rate Call Girls
Pragati Maidan Call Girls : ☎ 8527673949, Low rate Call Girlsashishs7044
 
FULL ENJOY - 9953040155 Call Girls in Moti Nagar | Delhi
FULL ENJOY - 9953040155 Call Girls in Moti Nagar | DelhiFULL ENJOY - 9953040155 Call Girls in Moti Nagar | Delhi
FULL ENJOY - 9953040155 Call Girls in Moti Nagar | DelhiMalviyaNagarCallGirl
 
Govindpuri Call Girls : ☎ 8527673949, Low rate Call Girls
Govindpuri Call Girls : ☎ 8527673949, Low rate Call GirlsGovindpuri Call Girls : ☎ 8527673949, Low rate Call Girls
Govindpuri Call Girls : ☎ 8527673949, Low rate Call Girlsashishs7044
 
MinSheng Gaofeng Estate commercial storyboard
MinSheng Gaofeng Estate commercial storyboardMinSheng Gaofeng Estate commercial storyboard
MinSheng Gaofeng Estate commercial storyboardjessica288382
 
FULL ENJOY - 9953040155 Call Girls in Laxmi Nagar | Delhi
FULL ENJOY - 9953040155 Call Girls in Laxmi Nagar | DelhiFULL ENJOY - 9953040155 Call Girls in Laxmi Nagar | Delhi
FULL ENJOY - 9953040155 Call Girls in Laxmi Nagar | DelhiMalviyaNagarCallGirl
 
Call Girl in Bur Dubai O5286O4116 Indian Call Girls in Bur Dubai By VIP Bur D...
Call Girl in Bur Dubai O5286O4116 Indian Call Girls in Bur Dubai By VIP Bur D...Call Girl in Bur Dubai O5286O4116 Indian Call Girls in Bur Dubai By VIP Bur D...
Call Girl in Bur Dubai O5286O4116 Indian Call Girls in Bur Dubai By VIP Bur D...dajasot375
 
9654467111 Full Enjoy @24/7 Call Girls In Saket Delhi Ncr
9654467111 Full Enjoy @24/7 Call Girls In Saket Delhi Ncr9654467111 Full Enjoy @24/7 Call Girls In Saket Delhi Ncr
9654467111 Full Enjoy @24/7 Call Girls In Saket Delhi NcrSapana Sha
 
The First Date by Daniel Johnson (Inspired By True Events)
The First Date by Daniel Johnson (Inspired By True Events)The First Date by Daniel Johnson (Inspired By True Events)
The First Date by Daniel Johnson (Inspired By True Events)thephillipta
 
Roadrunner Lodge, Motel/Residence, Tucumcari NM
Roadrunner Lodge, Motel/Residence, Tucumcari NMRoadrunner Lodge, Motel/Residence, Tucumcari NM
Roadrunner Lodge, Motel/Residence, Tucumcari NMroute66connected
 
Olivia Cox. intertextual references.pptx
Olivia Cox. intertextual references.pptxOlivia Cox. intertextual references.pptx
Olivia Cox. intertextual references.pptxLauraFagan6
 
Mandi House Call Girls : ☎ 8527673949, Low rate Call Girls
Mandi House Call Girls : ☎ 8527673949, Low rate Call GirlsMandi House Call Girls : ☎ 8527673949, Low rate Call Girls
Mandi House Call Girls : ☎ 8527673949, Low rate Call Girlsashishs7044
 
How Can You Get Dubai Call Girls +971564860409 Call Girls Dubai?
How Can You Get Dubai Call Girls +971564860409 Call Girls Dubai?How Can You Get Dubai Call Girls +971564860409 Call Girls Dubai?
How Can You Get Dubai Call Girls +971564860409 Call Girls Dubai?kexey39068
 
Kishangarh Call Girls : ☎ 8527673949, Low rate Call Girls
Kishangarh Call Girls : ☎ 8527673949, Low rate Call GirlsKishangarh Call Girls : ☎ 8527673949, Low rate Call Girls
Kishangarh Call Girls : ☎ 8527673949, Low rate Call Girlsashishs7044
 

Recently uploaded (20)

Bridge Fight Board by Daniel Johnson dtjohnsonart.com
Bridge Fight Board by Daniel Johnson dtjohnsonart.comBridge Fight Board by Daniel Johnson dtjohnsonart.com
Bridge Fight Board by Daniel Johnson dtjohnsonart.com
 
FULL ENJOY - 9953040155 Call Girls in Mahipalpur | Delhi
FULL ENJOY - 9953040155 Call Girls in Mahipalpur | DelhiFULL ENJOY - 9953040155 Call Girls in Mahipalpur | Delhi
FULL ENJOY - 9953040155 Call Girls in Mahipalpur | Delhi
 
FULL ENJOY - 9953040155 Call Girls in Gandhi Vihar | Delhi
FULL ENJOY - 9953040155 Call Girls in Gandhi Vihar | DelhiFULL ENJOY - 9953040155 Call Girls in Gandhi Vihar | Delhi
FULL ENJOY - 9953040155 Call Girls in Gandhi Vihar | Delhi
 
Delhi Room Call Girls : ☎ 8527673949, Low rate Call girl service
Delhi Room Call Girls : ☎ 8527673949, Low rate Call girl serviceDelhi Room Call Girls : ☎ 8527673949, Low rate Call girl service
Delhi Room Call Girls : ☎ 8527673949, Low rate Call girl service
 
FULL ENJOY - 9953040155 Call Girls in New Ashok Nagar | Delhi
FULL ENJOY - 9953040155 Call Girls in New Ashok Nagar | DelhiFULL ENJOY - 9953040155 Call Girls in New Ashok Nagar | Delhi
FULL ENJOY - 9953040155 Call Girls in New Ashok Nagar | Delhi
 
FULL ENJOY - 9953040155 Call Girls in Noida | Delhi
FULL ENJOY - 9953040155 Call Girls in Noida | DelhiFULL ENJOY - 9953040155 Call Girls in Noida | Delhi
FULL ENJOY - 9953040155 Call Girls in Noida | Delhi
 
Dxb Call Girls # +971529501107 # Call Girls In Dxb Dubai || (UAE)
Dxb Call Girls # +971529501107 # Call Girls In Dxb Dubai || (UAE)Dxb Call Girls # +971529501107 # Call Girls In Dxb Dubai || (UAE)
Dxb Call Girls # +971529501107 # Call Girls In Dxb Dubai || (UAE)
 
Pragati Maidan Call Girls : ☎ 8527673949, Low rate Call Girls
Pragati Maidan Call Girls : ☎ 8527673949, Low rate Call GirlsPragati Maidan Call Girls : ☎ 8527673949, Low rate Call Girls
Pragati Maidan Call Girls : ☎ 8527673949, Low rate Call Girls
 
FULL ENJOY - 9953040155 Call Girls in Moti Nagar | Delhi
FULL ENJOY - 9953040155 Call Girls in Moti Nagar | DelhiFULL ENJOY - 9953040155 Call Girls in Moti Nagar | Delhi
FULL ENJOY - 9953040155 Call Girls in Moti Nagar | Delhi
 
Govindpuri Call Girls : ☎ 8527673949, Low rate Call Girls
Govindpuri Call Girls : ☎ 8527673949, Low rate Call GirlsGovindpuri Call Girls : ☎ 8527673949, Low rate Call Girls
Govindpuri Call Girls : ☎ 8527673949, Low rate Call Girls
 
MinSheng Gaofeng Estate commercial storyboard
MinSheng Gaofeng Estate commercial storyboardMinSheng Gaofeng Estate commercial storyboard
MinSheng Gaofeng Estate commercial storyboard
 
FULL ENJOY - 9953040155 Call Girls in Laxmi Nagar | Delhi
FULL ENJOY - 9953040155 Call Girls in Laxmi Nagar | DelhiFULL ENJOY - 9953040155 Call Girls in Laxmi Nagar | Delhi
FULL ENJOY - 9953040155 Call Girls in Laxmi Nagar | Delhi
 
Call Girl in Bur Dubai O5286O4116 Indian Call Girls in Bur Dubai By VIP Bur D...
Call Girl in Bur Dubai O5286O4116 Indian Call Girls in Bur Dubai By VIP Bur D...Call Girl in Bur Dubai O5286O4116 Indian Call Girls in Bur Dubai By VIP Bur D...
Call Girl in Bur Dubai O5286O4116 Indian Call Girls in Bur Dubai By VIP Bur D...
 
9654467111 Full Enjoy @24/7 Call Girls In Saket Delhi Ncr
9654467111 Full Enjoy @24/7 Call Girls In Saket Delhi Ncr9654467111 Full Enjoy @24/7 Call Girls In Saket Delhi Ncr
9654467111 Full Enjoy @24/7 Call Girls In Saket Delhi Ncr
 
The First Date by Daniel Johnson (Inspired By True Events)
The First Date by Daniel Johnson (Inspired By True Events)The First Date by Daniel Johnson (Inspired By True Events)
The First Date by Daniel Johnson (Inspired By True Events)
 
Roadrunner Lodge, Motel/Residence, Tucumcari NM
Roadrunner Lodge, Motel/Residence, Tucumcari NMRoadrunner Lodge, Motel/Residence, Tucumcari NM
Roadrunner Lodge, Motel/Residence, Tucumcari NM
 
Olivia Cox. intertextual references.pptx
Olivia Cox. intertextual references.pptxOlivia Cox. intertextual references.pptx
Olivia Cox. intertextual references.pptx
 
Mandi House Call Girls : ☎ 8527673949, Low rate Call Girls
Mandi House Call Girls : ☎ 8527673949, Low rate Call GirlsMandi House Call Girls : ☎ 8527673949, Low rate Call Girls
Mandi House Call Girls : ☎ 8527673949, Low rate Call Girls
 
How Can You Get Dubai Call Girls +971564860409 Call Girls Dubai?
How Can You Get Dubai Call Girls +971564860409 Call Girls Dubai?How Can You Get Dubai Call Girls +971564860409 Call Girls Dubai?
How Can You Get Dubai Call Girls +971564860409 Call Girls Dubai?
 
Kishangarh Call Girls : ☎ 8527673949, Low rate Call Girls
Kishangarh Call Girls : ☎ 8527673949, Low rate Call GirlsKishangarh Call Girls : ☎ 8527673949, Low rate Call Girls
Kishangarh Call Girls : ☎ 8527673949, Low rate Call Girls
 

Mock'n'Stub Tools for iOS and macOS Testing

  • 1. Mock'n'StubMock'n'Stub OCMock, OCMockito, Nocilla, OHHTTPStubs Sandboxи немногоOCMock, OCMockito, Nocilla, OHHTTPStubs Sandboxи немного
  • 2. Пирожок Без НиктоПирожок Без Никто • Создавать дополнительные объектыСоздавать дополнительные объекты • " "Создавать временную реализацию протокола" "Создавать временную реализацию протокола • Оставлять затычкиОставлять затычки #ifdef DEBUG ...#ifdef DEBUG ... • Всякие радости с бэкэндомВсякие радости с бэкэндом
  • 3.
  • 4. Вот эти ребятаВот эти ребята • OCMockOCMock • OCMockitoOCMockito • NocillaNocilla • OHHTTPStubsOHHTTPStubs • Sandboxи немного Sandboxи немного
  • 5. Два брата-акробатаДва брата-акробата • mock-Создавать объекты для классовmock-Создавать объекты для классов OCMClassMockOCMClassMock((aClassaClass)) MKTMockMKTMock((aClassaClass)) • mock-Создавать объекты для протоколовmock-Создавать объекты для протоколов OCMProtocolMockOCMProtocolMock((aProtocolaProtocol)) MKTMockProtocolMKTMockProtocol((aProtocolaProtocol)) • OCMockitoУ есть дополнительные методыOCMockitoУ есть дополнительные методы MKTMockObjectAndProtocolMKTMockObjectAndProtocol((aClassaClass,, aProtocolaProtocol)) MKTMockProtocolWithoutOptionalsMKTMockProtocolWithoutOptionals((aProtocolaProtocol)) • OCMockУ есть дополнительные методыOCMockУ есть дополнительные методы OCMStrictClassMockOCMStrictClassMock((aClassaClass)) OCMStrictProtocolMockOCMStrictProtocolMock((aProtocolaProtocol)) OCMPartialMockOCMPartialMock((aObjectaObject)) OCMObserverMockOCMObserverMock()()
  • 6. Stubbing methodsStubbing methods idid<ContentProviderProtocol> contentProvider = ...<ContentProviderProtocol> contentProvider = ... OCMStubOCMStub([contentProvider([contentProvider loadSomeValuesloadSomeValues]).]).andReturnandReturn((@[@1, @3, @2]@[@1, @3, @2]);); [[MKTGivenMKTGiven([contentProvider([contentProvider loadSomeValuesloadSomeValues])]) willReturnwillReturn::@[@1, @3, @2]@[@1, @3, @2]];]; OCMockitoOCMockito --willReturnwillReturn%primitiveTypeName%:aValue%primitiveTypeName%:aValue --willReturnStructwillReturnStruct:aStructPointer:aStructPointer objCTypeobjCType:aType:aType --willDowillDo:aBlock:aBlock --willThrowwillThrow:anException:anException OCMockOCMock ..andReturnandReturn(aValue)(aValue) ..andThrowandThrow(anException)(anException) ..andPostandPost(aNotification)(aNotification) ..andCallandCall(anObject, aSelector)(anObject, aSelector) ..andDoandDo(aBlock)(aBlock) ..andForwardToRealObjectandForwardToRealObject()()
  • 7. Chaining stub actionsChaining stub actions OCMStubOCMStub([contentProvider([contentProvider loadSomeValuesloadSomeValues]).]).andReturnandReturn((@[@1, @3,@[@1, @3, @2]@2]).).andThrowandThrow((willThrowwillThrow:anException);:anException); [[[[MKTGivenMKTGiven([contentProvider([contentProvider loadSomeValuesloadSomeValues])]) willReturnwillReturn::@[@1, @3, @2]@[@1, @3, @2]]] willThrowwillThrow:anException];:anException];
  • 8. Advanced stubbing methodsAdvanced stubbing methods NSMutableArrayNSMutableArray *mockArray = ...*mockArray = ... OCMStubOCMStub([mockArray([mockArray addObject:@1addObject:@1]);]); OCMArgOCMArg *arg =*arg = [[OCMArgOCMArg isKindOfClassisKindOfClass:[:[NSStringNSString classclass]];]]; OCMStubOCMStub([mockArray([mockArray addObjectaddObject:arg]).:arg]).andThrowandThrow(anException);(anException); OCMArgOCMArg --isNilisNil --isNotNilisNotNil --isNotEqualisNotEqual:aValue:aValue --isKindOfClassisKindOfClass:aClass:aClass --checkWithSelectorcheckWithSelector:aSelector:aSelector onObjectonObject:anObject:anObject --checkWithBlockcheckWithBlock:^:^BOOLBOOL((idid value)blockvalue)block [[MKTGivenMKTGiven([mockArray([mockArray containsObjectcontainsObject::startsWithstartsWith((@"tes"@"tes")]))]) willReturnBoolwillReturnBool::YESYES];];
  • 9. Verifying interactionsVerifying interactions NSMutableArrayNSMutableArray *mockArray = ...*mockArray = ... [mockArray[mockArray removeObjectremoveObject::@"This is a test"@"This is a test"];]; [[MKTVerifyMKTVerify(mockArray)(mockArray) removeObjectremoveObject::startsWithstartsWith((@"This is"@"This is")];)]; OCMVerifyOCMVerify([mockArray([mockArray removeObjectremoveObject::startsWithstartsWith((@"This is"@"This is")]);)]); OCMExpectOCMExpect([mockArray([mockArray removeObjectremoveObject::startsWithstartsWith((@"This is"@"This is")]);)]); OCMExpectOCMExpect([mockArray([mockArray removeAllObjectsremoveAllObjects]);]); ...... OCMVerifyAllOCMVerifyAll(classMock)(classMock)
  • 10. NocillaNocilla + (+ (voidvoid)setUp)setUp {{ [[[[LSNocillaLSNocilla sharedInstancesharedInstance]] startstart];]; }} - (- (voidvoid)setUp)setUp {{ [[[[LSNocillaLSNocilla sharedInstancesharedInstance]] clearStubsclearStubs];]; }} + (+ (voidvoid)tearDown)tearDown {{ [[[[LSNocillaLSNocilla sharedInstancesharedInstance]] stopstop];]; }}
  • 11. Stubbing requestsStubbing requests stubRequeststubRequest((@"GET"@"GET",, @"http://mockingbird.getsandbox.com/selectedColor"@"http://mockingbird.getsandbox.com/selectedColor")) ..withHeaderswithHeaders((@{@{@"Accept"@"Accept":: @"application/json"@"application/json"}})) ..andReturnandReturn((200200)) ..withHeaderswithHeaders((@{@{@"Content-Type"@"Content-Type":: @"application/json"@"application/json"}})) ..withBodywithBody((@"{"selectedColor":[1, 0, 0, 1]}"@"{"selectedColor":[1, 0, 0, 1]}");); andReturnRawResponseandReturnRawResponse(aData);(aData); andFailWithErrorandFailWithError(anError);(anError);
  • 12. OHHTTPStubsOHHTTPStubs [[OHHTTPStubsOHHTTPStubs stubRequestsPassingTeststubRequestsPassingTest:^:^BOOLBOOL((NSURLRequestNSURLRequest *request) {*request) { ...... returnreturn isRequestAcceptedByStub;isRequestAcceptedByStub; }} withStubResponsewithStubResponse:^:^OHHTTPStubsResponseOHHTTPStubsResponse*(*(NSURLRequestNSURLRequest *request) {*request) { returnreturn httpStubsResponse;httpStubsResponse; }];}]; OHHTTPStubsResponseOHHTTPStubsResponse ++ responseWithDataresponseWithData::statusCode:headersstatusCode:headers:: ++ responseWithFileAtPathresponseWithFileAtPath::statusCode:headersstatusCode:headers:: ++ responseWithErrorresponseWithError:: ++ responseWithJSONObjectresponseWithJSONObject::statusCodestatusCode::headersheaders:: ++ responseWithHTTPMessageDataresponseWithHTTPMessageData:: ++ responseNamed:inBundleresponseNamed:inBundle::
  • 14.
  • 15. Всем спасибо за внимание!Всем спасибо за внимание! • OCMock -OCMock - http://ocmock.org/http://ocmock.org/ • OCMockito -OCMockito - https://github.com/jonreid/OCMockitohttps://github.com/jonreid/OCMockito • Nocilla -Nocilla - https://github.com/luisobo/Nocillahttps://github.com/luisobo/Nocilla • OHHTTPStubs -OHHTTPStubs - https://github.com/AliSoftware/OHHTTPStubshttps://github.com/AliSoftware/OHHTTPStubs • Sandbox -Sandbox - https://getsandbox.com/https://getsandbox.com/