如何使用OCMock测试是否在完成处理程序块内调用了对象的方法?
我有一个方法:
@implementation SomeClass - (void)thisMethod:(ObjectA *)objA { [APIClient connectToAPIWithCompletionHandler:^(id result){ if (result) [objA methodOne]; else [objA methodTwo]; }]; }
有没有办法validation在调用thisMethod:
时将调用thisMethod:
或methodTwo
? 基本上我只想存根connectToAPIWithCompletionHandler:
方法。 现在我可以通过调整connectToAPIWithCompletionHandler:
方法来实现这一点。 但我想知道是否有更好的方法。
我在这里找到了类似的问题,但它使用的是实例方法,而在我的例子中是类方法。
尝试这个:
- (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]; }
请注意,我直接在浏览器中键入了这个,但希望它接近工作。