Objective C - OCMock期望一个具有块参数的方法?

时间:2014-02-11 23:09:51

标签: objective-c objective-c-blocks ocmock

我有一个接受字符串和完成块参数的方法。 我只关心字符串参数,但OCMockObject抛出异常,我应该作为块参数传递什么?

我的协议

@protocol SomeService <NSObject>

- (void)fetchDataForUsername:(NSString *)username andCompletion:(void (^)(NSArray *someData, NSError *error))completion;

@end

我的测试

OCMockObject *mock = [OCMockObject niceMockForProtocol:@protocol(SomeService)];
[[mock expect] fetchDataForUsername:@"SPECIFIC_USERNAME" andCompletion:[OCMArg any]];

错误记录

**-[OCMAnyConstraint copyWithZone:]: unrecognized selector sent to instance 0xdc79750**

1 个答案:

答案 0 :(得分:3)

我也有一些模拟协议的问题。在一般情况下,OCMock很乐意处理块参数:

// Foo
+ (void)blockTest
{
    [UIView animateWithDuration:10.0 animations:^{
        [[[[UIApplication sharedApplication] windows][0] rootViewController] view].alpha = 0.5;
    }];
}

// Test -- this works fine!
- (void)testBlock
{
    id viewMock = [OCMockObject mockForClass:UIView.class];
    [[viewMock expect] animateWithDuration:10.0 animations:OCMOCK_ANY];

    [Foo blockTest];
    [viewMock verify];

}

为了解决协议模拟的问题,我创建了一个实现协议的虚拟类(使用空方法),然后模拟该类的方法并像使用任何其他模拟对象一样使用它。