Как заглушить метод класса с блоком ответа, используя OCMock - PullRequest
0 голосов
/ 15 мая 2018
HTTPResult *successResult = [[HTTPResult alloc] init];
successResult.success = YES;
successResult.content = @{@"key":@"value"};

id httpMock = OCMClassMock([HTTPUtility class]);

OCMStub(ClassMethod([httpMock requestWithHTTPMethod:HTTPRequestMethodGet                        
    URLString:@"testURL"
    parameters:[OCMArg any]
response:[OCMArg any]])).andDo(^(NSInvocation *invocation) {
            void(^response)(HTTPResult *) = nil;
            [invocation getArgument:&response atIndex:5];
            response(successResult);
        });

этот бросок EXC_BAD_ACCESS в методе [OCMockObject dealloc] и сбой при вызове метода класса

как правильно проверить метод класса с конкретным блоком

1 Ответ

0 голосов
/ 20 мая 2018

Похоже, что вы хотите захватить блок аргумента ответа, переданный в метод класса (без знания сигнатуры метода, в котором я не могу быть уверен), поэтому вместо использования [OCMArg any] вы можете проверить аргумент с помощью блок. См. Раздел 4.3 здесь .

[OCMArg checkWithBlock:^BOOL(id value) { /* return YES if value is ok */ }]

Итак, в вашем примере:

OCMStub(ClassMethod([httpMock requestWithHTTPMethod:HTTPRequestMethodGet                        
    URLString:@"testURL"
    parameters:[OCMArg any]
    response:[OCMArg checkWithBlock:^BOOL(HTTPResult *response) {
        response(successResult);
        return YES; // Replace this with a check for whether response is valid.
    }]);
...