在NSOperation上使用OCMock会导致访问错误

时间:2013-08-08 08:59:53

标签: ios objective-c unit-testing ocmock

我正在写一个单元测试,它给了我麻烦。结果我可以使用OCMock和普通的obj-c重现麻烦。所以我正在分享我的简单测试,在这里重现我的问题,希望有人可以帮助我理解它为什么失败,以及我可能如何编写这个测试而不会崩溃。

错误讯息为EXC_BAD_ACCESS(code=2,address=0x58)

-(void)testIfNSOperationIsMockable {
    NSOperationQueue *queue = [NSOperationQueue new];
    queue.maxConcurrentOperationCount = 1;
    [queue setSuspended:YES];

    NSOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
        NSLog(@"I am a simple operation.");
    }];

    id mockOperation = [OCMockObject partialMockForObject:operation];

    [[mockOperation expect] cancel];

    [queue addOperation:mockOperation]; // chrash happens on this line

    [queue cancelAllOperations];

    [queue setSuspended:NO];

    [mockOperation verify];
}

我知道这可能看起来像是一个愚蠢的测试,但在我的真实单元测试中,队列被包装在一个管理器中,操作是一个自定义实现,取消由包装器发送并且只针对一个特定的操作,所以忍受我和我过于简单的考验。

1 个答案:

答案 0 :(得分:0)

根据我之前的评论中的建议,您可以将原始operation变量添加到队列