NSDecimalNumber单元测试之争
NSDecimalNumber unit test struggle
我正在尝试为我的方法编写单元测试,在 NSDecimalNumber 上执行一些操作。为简单起见,我准备了这个简单的单元测试片段:
- (void) testTmp {
NSDecimalNumber* val = [NSDecimalNumber decimalNumberWithString:@"0"];
XCTAssertEqual([val stringValue], @"0");
}
不幸的是,它失败了,我无法让它工作。我究竟做错了什么?如何测试 NSDecimalNumber 的值是否等于其他值?
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
的实例是浮点值。比较它们的公平性是巫术。
我正在尝试为我的方法编写单元测试,在 NSDecimalNumber 上执行一些操作。为简单起见,我准备了这个简单的单元测试片段:
- (void) testTmp {
NSDecimalNumber* val = [NSDecimalNumber decimalNumberWithString:@"0"];
XCTAssertEqual([val stringValue], @"0");
}
不幸的是,它失败了,我无法让它工作。我究竟做错了什么?如何测试 NSDecimalNumber 的值是否等于其他值?
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
的实例是浮点值。比较它们的公平性是巫术。