Буду очень признателен за советы по проверке ошибок с помощью 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];
}
Проблема
Я хочу проверить, правильно ли работает вложенный код обработки ошибок. Поэтому я хочу иметь возможность вводить определенный код ошибки в определенный момент метода.
Примеры
Имитировать ошибку в захвате имени процесса. Я бы проверил, что захват идентификатора процесса не вызывается.
Имитировать ошибку только при захвате идентификатора процесса. Я бы проверил, что захват имени процесса запущен, но никакие операции после ID процесса не выполняются.
Независимо от того, где произошла ошибка, проверьте, что возникла правильная ошибка.
Что я пробовал
Очевидная вещь, которую нужно попробовать, - установить ошибку там, где я поставил «... Каким-то образом ввести ошибку здесь ...». Я не ожидал, что это сработает, и это не сработало.
Я искал в Google ответы и думал о том, чтобы попытаться каким-то образом обернуть ошибку в отдельном классе, но я не понимаю, как это поможет.
Я думал об этом часами, но все еще не приблизился к решению.
Может кто-нибудь помочь?