OCMock 方法中的存根块

Stubbing blocks in method OCMock

我在模拟我要测试的方法之一中的块时遇到了一些困难。

下面大致是我的代码的样子

- (void) startFetching:(MyParameter *) parameter
{
    self.fetcher = [[MyFetcher alloc] initWithContext:xxxx andObserver:nil];
    self.fetcher.parameters = @[parameter];
    [self.fetcher startWithCompleteionBlock:^(id<MyOperation>  _Nonnull operation) {
        if(operation.errors.count > 0) {
            [self.delegate failedWithError:operation.errors.firstObject];
        } else{
            FetcherResponse *response = [MyFetcherResponse cast:operation];
            NSArray *array =  response.responseArray;
           if(array.count == 1) {
                [self.delegate completedWithSuccess:array.firstObject];
            }
        }
    }];
}

现在我有一个像 testStartFetching 这样的测试方法,我想测试这个方法。我不明白如何将这部分 [self.fetcher startWithCompleteionBlock:^(id<MyOperation> _Nonnull operation) 放入我的方法中,以便在成功的情况下它 return 正确的数组,在失败的情况下它 return 错误,如果我将它存根如果有错误,则调用 failedWithError:operation,否则调用 completedWithSuccess

我在 objective c 中使用 OCMock 框架,我是单元测试的新手。任何帮助将不胜感激。

I 存根方法完成块 returns operation (有错误)。然后我验证调用委托的方法 - failedWithError 使用正确的参数(错误)。

   id<MyOperation> operation = [[MyClassOperaion alloc] init];
    NSError *error = [NSError new];
    operation.errors = @[error];

    OCMStub([self.fetcher startWithCompleteionBlock:([OCMArg checkWithBlock:^BOOL(void(^passedBlock)(id<MyOperation>  _Nonnull operation)) {
        passedBlock(operation);
        return YES;
    }])]);

    OCMVerify([self.delegate failedWithError:error]);