如何使用OCMock测试是否在完成处理程序块内调用了对象的方法?

时间:2013-07-17 07:50:11

标签: ios objective-c unit-testing ocmock

我有一个方法:

@implementation SomeClass

- (void)thisMethod:(ObjectA *)objA {
    [APIClient connectToAPIWithCompletionHandler:^(id result){
        if (result) [objA methodOne];
        else [objA methodTwo];
    }];
}

在调用methodOne时,有没有办法验证methodTwothisMethod:?基本上我只想存根connectToAPIWithCompletionHandler:方法。现在我可以通过调动connectToAPIWithCompletionHandler:方法来做到这一点。但我想知道是否有更好的方法。

我发现了类似的问题here,但它使用的是实例方法,而在我的例子中是类方法。

1 个答案:

答案 0 :(得分:2)

试试这个:

- (void)test_thisMethod {
    id mockA = [OCMockObject mockForClass:[ObjectA class]];
    id mockClient = [OCMockObject mockForClass:[APIClient class]];

    // Use class method mocking on APIClient
    [[mockClient expect] andDo:(NSInvocation *invocation) {
        void (^completion)(id result) = [invocation getArgumentAtIndexAsObject:2];
        completion(nil);
    }] connectToAPIWithCompletionHandler:OCMOCK_ANY];

    [[mockA expect] methodTwo];

    [[SomeClass new] thisMethod:mockA];

    [mockA verify];
    [mockClient verify];        
}

请注意,我直接在浏览器中输入了这个内容,但希望它接近工作。