我正在尝试为我的方法编写单元测试,在NSDecimalNumber上执行一些操作。为简单起见,我准备了这个简单的单元测试片段:
- (void) testTmp {
NSDecimalNumber* val = [NSDecimalNumber decimalNumberWithString:@"0"];
XCTAssertEqual([val stringValue], @"0");
}
不幸的是它失败了,我无法让它发挥作用。我究竟做错了什么?如何测试NSDecimalNumber的值是否等于其他值?
答案 0 :(得分:0)
XCTAssertEqual()
比较对象引用。您应该使用XCTAssertEqualObjects()
。
- (void) testTmp {
NSDecimalNumber* val = [NSDecimalNumber decimalNumberWithString:@"0"];
XCTAssertEqualObjects([val stringValue], @"0");
}
BTW:您不应该比较数字的字符串表示,而是数字本身......:
- (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
的实例是浮点值。比较它们的公平性就是伏都教。