How to mock CoralCall [call:error:] method to return error
How to mock CoralCall [call:error:] method to return error
我们从 CoralClient 生成 Obj-C 代码,这里是 CoralCall 的一个方法 class:
- (id)call:(CoralModel *)request error:(NSError * __autoreleasing *)error;
这里基本上是我使用 CoralCall 的代码:
Request *request = ...;
// Make the Coral call
NSError *error = nil;
int count = 0;
do {
// There's no result, because this API won't return anything
[coralCall call:request error:&error];
++count;
} while (error != nil && count < MAX_RETRY_COUNT);
completionHandler(error);
如何使用 OCMock 将 coralCall 对象模拟为 return [call:error:] 方法中的错误?我想对重试逻辑进行单元测试,但似乎没有办法实现。
注意:我可以轻松模拟调用成功,但不能模拟失败,像这样:
// Doesn't matter what the returned value is, so use nil for simplicity
OCMStub([self.coralCall call:[OCMArg any] error:(NSError * __autoreleasing *)[OCMArg anyPointer]]).andReturn(nil);
更新:Erik 的回答现在解决了这个问题。如果有人需要答案,这里是模拟错误的方法:
NSError *error = OCMClassMock([NSError class]);
OCMStub([self.coralCall call:[OCMArg any] error:[OCMArg setTo:error]]).andReturn(nil);
看起来你想做的事情在参考文档的第 2.5 节(Returning values in pass-by-reference arguments)中有描述:http://ocmock.org/reference/#stubing-methods
我们从 CoralClient 生成 Obj-C 代码,这里是 CoralCall 的一个方法 class:
- (id)call:(CoralModel *)request error:(NSError * __autoreleasing *)error;
这里基本上是我使用 CoralCall 的代码:
Request *request = ...;
// Make the Coral call
NSError *error = nil;
int count = 0;
do {
// There's no result, because this API won't return anything
[coralCall call:request error:&error];
++count;
} while (error != nil && count < MAX_RETRY_COUNT);
completionHandler(error);
如何使用 OCMock 将 coralCall 对象模拟为 return [call:error:] 方法中的错误?我想对重试逻辑进行单元测试,但似乎没有办法实现。
注意:我可以轻松模拟调用成功,但不能模拟失败,像这样:
// Doesn't matter what the returned value is, so use nil for simplicity
OCMStub([self.coralCall call:[OCMArg any] error:(NSError * __autoreleasing *)[OCMArg anyPointer]]).andReturn(nil);
更新:Erik 的回答现在解决了这个问题。如果有人需要答案,这里是模拟错误的方法:
NSError *error = OCMClassMock([NSError class]);
OCMStub([self.coralCall call:[OCMArg any] error:[OCMArg setTo:error]]).andReturn(nil);
看起来你想做的事情在参考文档的第 2.5 节(Returning values in pass-by-reference arguments)中有描述:http://ocmock.org/reference/#stubing-methods