【发布时间】:2014-01-21 00:00:04
【问题描述】:
我的方法返回一个 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。我现在很困惑。
【问题讨论】:
-
在
getRating:ratingType:方法中,您如何创建NSNumber? -
NSNumber *result = 0;然后我在方法结束时返回结果。
-
尝试记录
cRating的类。即NSLog(@"%@", [cRating class])并确保它不是NSString或其他东西 -
如果只用
[[NSNumber alloc]initWithInt:70]替换[movie getRating:ratingDictionary ratingType:criticRating];会发生什么? -
类是 __NSCFConstantString。
标签: objective-c xctest