我正在关注 G. Lee 的 Test-Driven iOS development 一书,遇到了这个单元测试,我不明白。首先,如果您需要更多代码,请立即告诉我。
-(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
...
}
错误是如何自动设置的?
更新:
感谢大家的积极讨论和建议。答案解释了调用方如何因为 & 得到错误实例,我明白这一点。我的问题仍然是为什么被调用方指向一个填充的 NSError 实例,即使它必须为零。我没有在其中设置错误实例,newsFromJSON:error:
那么它是如何在那里填充的?
我刚改[newsManager receivedNewsJSON:@"Fake Json1"];
了,里面的错误实例newsFromJSON:error:
马上就反映了
(NSError **) error = 0x00007fff5b9b27f0 domain: @"Fake Json1" - code: 0
。它非常混乱......