在方法OCMock中存根块

时间:2016-10-24 14:23:21

标签: ios objective-c unit-testing mocking 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),以便在成功的情况下返回正确的数组,并且在失败的情况下它会返回错误,如果我将其存在错误,那么{{1 }}被调用,否则failedWithError:operation被调用。

我在目标c中使用OCMock框架,我是单元测试的新手。任何帮助将受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

我带有完成块的存根方法返回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]);