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

标签 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];
}

我知道这看起来像是一个愚蠢的测试,但是在我的实际单元测试中,队列被包装在管理器中,该操作是自定义实现,取消由包装器发送,并且仅针对一个特定操作,因此请耐心等待和我过于简单的测试。

最佳答案

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

关于ios - 在NSOperation上使用OCMock会导致错误的访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18121902/

相关文章:

java - 使用 Mockito 2 模拟服务导致 stub 错误

ios - TabBarController 不会自动旋转

ios - 在没有 .plist 文件的情况下使用适用于 iOS 的 Google Analytics

ios - 导航中实例的不确定性 : UITabBarController

objective-c - 如何使用枚举类型?

unit-testing - 如何确定单元测试的测试用例?

ios - GPUImage 使图像大小加倍 - iOS/Swift

iphone - 调用方法时 UIView 无法正确显示

iphone - 在 iOS 中,GestureRecognizer 目标操作是否在单独的线程中运行?

c# - 我应该如何测试复杂的方法?