Есть ли способ изменить один из параметров в OCMock и продолжить выполнение заглушки
Здравствуйте, я пытаюсь изменить параметр функции, которую я заглушил. Я вижу в журналах, что моя заглушка вызывается успешно, и я хочу изменить один из параметров и запустить исходную функцию. Могу ли я сделать это с OCMock?
Вот что я делаю:
....
id testMgrMock = [OCMockObject partialMockForObject:testClassInstance];
OCMStub([testMgrMock addRequestWithMethod:OCMOCK_ANY
path:OCMOCK_ANY
parameters:OCMOCK_ANY
headers:OCMOCK_ANY
body:OCMOCK_ANY
delegate:OCMOCK_ANY
successBlock:OCMOCK_ANY
failureBlock:OCMOCK_ANY]).
andDo(^(NSInvocation* invocation){
NSString* path = @"http://addressnotexi.st";
[invocation setArgument:&path atIndex:2];
// here I want to call "addRequestWithMethod:path:parameters:header (etc)"
// on a real object with the parameter "path" changed to my string
[invocation invoke];
});
......
линия [invocation invoke];
дает мне сбой bad_exec. Даже если я не изменю параметр.
Как это сделать правильно? Это вообще возможно?
Спасибо
1 ответ
Решение
Я нашел проблему
Нужно изменить код следующим образом:
до @implementation
:
NSString invalidPath = @"http://theaddressthatdoesnotexis.ts";
И код будет выглядеть так:
....
id testMgrMock = [OCMockObject partialMockForObject:testClassInstance];
OCMStub([testMgrMock addRequestWithMethod:OCMOCK_ANY
path:[OCMArg isNotEqual:invalidPath]
parameters:OCMOCK_ANY
headers:OCMOCK_ANY
body:OCMOCK_ANY
delegate:OCMOCK_ANY
successBlock:OCMOCK_ANY
failureBlock:OCMOCK_ANY]).
andDo(^(NSInvocation* invocation){
[invocation setArgument:&invalidPath atIndex:3];
[invocation invoke];
});
......
Короче говоря. Мой вызов работал, но если звонил сам