【问题标题】:Cannot get to NSErrors from unit tests无法从单元测试中获取 NSErrors
【发布时间】:2010-07-20 15:04:42
【问题描述】:

我正在设置单元测试来运行应该生成 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、错误地测试它,还是两者兼而有之?

谢谢!

【问题讨论】:

    标签: objective-c unit-testing testing


    【解决方案1】:

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

    改变它,你应该会得到一个积极的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-28
      • 2021-01-03
      • 2017-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-11
      相关资源
      最近更新 更多