Есть ли способ изменить один из параметров в 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];
});
......

Короче говоря. Мой вызов работал, но если звонил сам

Другие вопросы по тегам