我正在设置单元测试来运行应该生成NSError的方法。出于某种原因,我无法从单元测试中获得NSError。我创建了一个示例方法来测试它,它仍然无法正常工作。我做错了什么?
实施档案:
- (BOOL)createAnError:(NSError **)error {
NSMutableDictionary *errorDetail = [NSMutableDictionary dictionary];
[errorDetail setValue:NSLocalizedString(@"This error should be testable", @"")
forKey:NSLocalizedDescriptionKey];
[errorDetail setObject:self
forKey:NSValidationObjectErrorKey];
NSError *cannotDeleteError = [NSError errorWithDomain:@"myErrorDomain"
code:12345
userInfo:errorDetail];
if (*error = nil)
*error = cannotDeleteError;
return NO;
}
单元测试:
- (void)testNSErrors {
Unit *myObj = [NSEntityDescription insertNewObjectForEntityForName:@"TestObject"
inManagedObjectContext:managedObjectContext];
NSError *error = nil;
STAssertFalse([myObj createAnError:&error], @"This method should return NO");
STAssertEquals([error code], 12345, @"The error code is incorrect. (error = %@)", error);
}
我在构建结果中看到的错误是:error: -[LogicTests testNSErrors] : '0' should be equal to '12345': The error code is incorrect. (error = (null))
。
那为什么会这样呢?我是否错误地创建了NSError,错误地测试了它,或者两者都测试了?
谢谢!
答案 0 :(得分:0)
您没有正确创建错误。在您的示例方法中,您将测试if (*error = nil)
。这是一项任务。您真正的意思是:if (*error == nil)
,它使用相等运算符。
改变这一点,你应该得到积极的结果。