NSError的单元测试

时间:2010-07-17 18:49:06

标签: iphone objective-c unit-testing testing core-data

喂,

我正在尝试为接受* NSError作为参数的代码设置一些单元测试。如果存在验证问题,则不保存对象并设置NSError条件。

我的方法是:

- (BOOL)validateConsistency:(NSError **)error {

    ... code omitted for brevity ...

    if (errorCondition == YES) {
        NSMutableDictionary *errorDetail = [NSMutableDictionary dictionary];
        [errorDetail setValue:@"Validation failed " forKey:NSLocalizedDescriptionKey];
        *error = [NSError errorWithDomain:@"myDomain" code:100 userInfo:errorDetail];
        return nil;
    }
    ...
}

一旦我创建了应该生成此错误的条件,我如何在单元测试中对其进行STAssert / test?

感谢。

1 个答案:

答案 0 :(得分:3)

你在两个地方做的有点错误:

  • 当你想要返回NO
  • 时,你将返回nil
  • 在分配之前,您没有检查error != nil。将nil作为NSError指针传递给“我不在乎”是合法的。

修复后,您可以使用

测试工作案例
STAssertTrue(validateConsistency:nil, ...)

对于错误情况,你只需这样做:

NSError *error;
STAssertFalse(validateConsistency:&error, ...); // Make sure we failed
STAssertEqual([error code], 100, ...); // Make sure the code is right; we can assume the domain is right, or you could check it.