gpt4 book ai didi

objective-c - 使用 OCMock 测试嵌套错误处理

转载 作者:搜寻专家 更新时间:2023-10-30 20:08:12 24 4
gpt4 key购买 nike

我非常感谢有关使用 OCMock 测试错误的建议。

待测方法

它使用 AppScriptController 类的实例获取进程。

@implementation ProcessGrabber

-(void)grabProcess {
NSError *error = nil;

NSString *processName = [appScriptController processName:ProcessRef
error:&error];
if(error == nil) {
NSNumber *processID = [appScriptController processID:ProcessRef
error:&error];

if(error == nil) {
... More operations...
}
}

if(error) {
[NSApp raiseError:error];
}
}

@end

模拟方法

AppScriptController 类与系统交互,所以我想模拟它。

@implementation AppScriptController

-(NSString *)processName:(SERef *)theProcessRef error:(NSError **)theError {
return [[theProcessRef name] error:error];
}

-(NSNumber *)processID:(SERef *)theProcessRef error:(NSError **)theError {
return [[theProcessRef name] error:error];
}

测试

-(void)testGrabProcess {
NSError *error = nil;

OCMockObject *mock = [OCMockObject mockForClass:[AppScriptController class]];
[[[mock expect] andReturn:@"Process Name"] processName:nil error:&error];

// ... Somehow inject an error here...

[[[mock expect] andReturn:34] processID:nil error:&error];

}

问题

我想检查嵌套的错误处理代码是否正常工作。所以我希望能够在方法中的特定点注入(inject)特定的错误代码。

示例

模拟进程名称抓取错误。我会测试不会调用进程 ID 抓取。

仅在进程ID抓取时模拟错误。我会测试进程名称抓取是否运行,但进程 ID 执行后没有任何操作。

无论错误发生在何处,都要测试是否引发了正确的错误。

我尝试过的

显然要尝试的是在我放置“...以某种方式在此处注入(inject)错误...”的位置设置错误。我没想到这会起作用,但它没有。

我在 Google 上搜索了答案,我考虑过尝试以某种方式将错误包装在一个单独的类中,但我看不出这会有什么帮助。

我已经考虑了好几个小时,但我仍然离解决方案还差得很远。

有人能帮忙吗?

最佳答案

如果其他人仍在寻找这个,实际上有一个相当简单的方法可以使用 OCMock 来完成:

- (void)testGrabProcess {

OCMockObject *mock = [OCMockObject mockForClass:[AppScriptController class]];
[[[[mock expect] andDo:^(NSInvocation *invocation) {
NSError * __autoreleasing *anError = nil;
[invocation getArgument:&anError atIndex:3];
*anError = [NSError errorWithDomain:@"MYDomain" code:2323 userInfo:nil];
}] andReturn:@"Process Name"] processName:nil error:&error];

[[[mock expect] andReturnValue:@34] processID:nil error:(BECloudPlayerDevice *__autoreleasing *)[OCMArg anyPointer]];
}

关于objective-c - 使用 OCMock 测试嵌套错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1114751/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com