【问题标题】:NSDecimalNumber unit test struggle [duplicate]NSDecimalNumber 单元测试斗争[重复]
【发布时间】:2015-10-11 10:38:06
【问题描述】:
我正在尝试为我的方法编写单元测试,对 NSDecimalNumber 执行一些操作。为简单起见,我准备了这个简单的单元测试 sn-p:
- (void) testTmp {
NSDecimalNumber* val = [NSDecimalNumber decimalNumberWithString:@"0"];
XCTAssertEqual([val stringValue], @"0");
}
不幸的是,它失败了,我无法让它工作。我究竟做错了什么?如何测试 NSDecimalNumber 的值是否等于其他值?
【问题讨论】:
标签:
objective-c
unit-testing
nsdecimalnumber
【解决方案1】:
XCTAssertEqual() 比较对象引用。你应该使用XCTAssertEqualObjects()。
- (void) testTmp {
NSDecimalNumber* val = [NSDecimalNumber decimalNumberWithString:@"0"];
XCTAssertEqualObjects([val stringValue], @"0");
}
顺便说一句:你不应该比较数字的字符串表示,而是数字本身……:
- (void) testTmp {
NSDecimalNumber* val = [NSDecimalNumber decimalNumberWithString:@"0"];
XCTAssertEqualObjects(val, [NSDecimalNumber decimalNumberWithString:@"0"]);
}
……或者(没查,NSNumber和NSDecimalNumber是否可以相等,但应该是这样)……
- (void) testTmp {
NSDecimalNumber* val = [NSDecimalNumber decimalNumberWithString:@"0"];
XCTAssertEqualObjects(val, @0);
}
但是,NSDecimalNumber 的实例是浮点值。比较它们的公平性是巫术。