无法从单元测试中获得NSErrors

时间:2010-07-20 15:04:42

标签: objective-c unit-testing testing

我正在设置单元测试来运行应该生成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,错误地测试了它,或者两者都测试了?

谢谢!

1 个答案:

答案 0 :(得分:0)

您没有正确创建错误。在您的示例方法中,您将测试if (*error = nil)。这是一项任务。您真正的意思是:if (*error == nil),它使用相等运算符。

改变这一点,你应该得到积极的结果。