有没有办法更改 OCMock 中的一个参数并继续 运行 存根函数

Is there a way to change one of parameters in OCMock and continue running the stubbed function

您好,我正在尝试更改已存根的函数的参数。 我在日志中看到我的存根被成功调用,我想更改其中一个参数和 运行 原始函数。我可以用 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 崩溃。即使我不更改参数。

如何正确操作?有可能吗?

谢谢

我发现了问题

需要按以下方式重新排列代码:

@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];
});
......

简而言之。我的调用正在运行,但如果正在调用自身