Я следую за книгой, разработанной G. Lee, с помощью Test-Driven iOS и наткнулся на этот модульный тест, который я не понимаю. Прежде всего, если вам нужно больше кода, пожалуйста, сообщите мне сразу.Объект NSError, уже заполненный первым вызовом метода
-(void)testDelegateNotifiedOfErrorWhenNewsBuilderFails
{
MockNewsBuilder *builder = [MockNewsBuilder new];
builder.arrayToReturn = nil;
builder.errorToSet = underlyingError;
newsManager.newsBuilder = builder;
[newsManager receivedNewsJSON:@"Fake Json"];
...
}
-(void)receivedNewsJSON:(NSString *)objectNotation
{
NSError *error = nil;
// As you see error is nil and I am passing in a nil error.
NSArray *news = [_newsBuilder newsFromJSON:objectNotation error:&error];
...
}
@implementation MockNewsBuilder
-(NSArray *)newsFromJSON:(NSString *)objectNotation error:(NSError **)error
{
// But once I arrive here, error is no longer nil.
// (NSError **) error = 0x00007fff5cb887f0 domain: @"Fake Json" - code: 0
...
}
Как устанавливается автоматическая магическая ошибка?
UPDATE:
Спасибо всем за активное обсуждение и консультации. Ответы объясняют, как сторона-получатель получает экземпляр ошибки из-за &, я это четко понимаю. Мой вопрос остается, хотя почему вызываемая сторона указывает на заполненный экземпляр NSError, хотя он должен был быть nil. Я не установил экземпляр ошибки в newsFromJSON:error:
, так как он уже заселен там?
Я только что изменил [newsManager receivedNewsJSON:@"Fake Json1"];
и экземпляр ошибки в newsFromJSON:error:
отражает сразу (NSError **) error = 0x00007fff5b9b27f0 domain: @"Fake Json1" - code: 0
. Его очень запутанная ...
Этот http://stackoverflow.com/a/833124/790842 отвечает на ваш вопрос. – iphonic
Нет причин, по которым «NSError» уже будет заполнен, если это не первый раз, когда был вызван «newsFromJSON» или что-то еще вызвано заранее. В коде, который вы показываете, он должен быть «nil». – Droppy
@ Droppy благодарит за ведение дискуссии. :) Я уточнил вопрос с более подробной информацией. Но для меня это остается загадкой. – Houman