如何使用xctest测试对象的相等性?

时间:2014-01-21 00:00:04

标签: objective-c xctest

我的方法返回一个NSNumber *,我想对这个方法进行单元测试。由于我的实际返回值是NSNumber *,因此我创建了NSNumber *的新期望值,但它失败了。这是代码:

NSNumber *cRating = [movie getRating:ratingDictionary ratingType:criticRating];
XCTAssertEqualObjects(cRating, [[NSNumber alloc]initWithInt:70], @"");

错误是:

[SFModelTest testGetCriticRatingMethod] failed: ((cRating) equal to ([[NSNumber alloc]initWithInt:70])) failed: ("70") is not equal to ("70")

因为它说“70”不等于“70”,所以我猜它与alloc init有关。一些不相​​等的指针东西。有人可以帮忙吗?谢谢。

编辑评论:添加getRating方法

- (NSNumber *)getRating:(NSDictionary *)movieDic ratingType:(enum RatingsEnum) rating{

    NSNumber *result = 0;
    NSNumber *ratingNum = 0;

    switch (rating) {
        case userRating:
        {
            ratingNum = [movieDic objectForKey:@"audience_score"];
            break;
        }
        case criticRating:
        {
            ratingNum = [movieDic objectForKey:@"critics_score"];
            break;
        }
        default:
            break;
    }

    if(ratingNum && ratingNum > 0)
    {
        result = ratingNum;
    }

    return result;
}

该方法返回NSNumber。我的测试是:

NSNumber *cRating = [movie getRating:ratingDictionary ratingType:criticRating];
XCTAssertEqualObjects(cRating, [[NSNumber alloc]initWithInt:70], @"");

当我执行NSLOG类时,它返回__NSCFConstantString。我现在很困惑。

1 个答案:

答案 0 :(得分:0)

我认为你做错了,因为XCTAssertEqualObjects(@(1), @(1), @"Not equal.");XCTAssertEqualObjects([NSNumber numberWithInt:1], [NSNumber numberWithInt:1], @"Not equal.");如果你不熟悉文字,会通过。

您应该检查getRating:ratingType:方法以查看它返回的对象类型。

尝试在XCTAssertEqualObjects之前添加断点并检查cRating实例。