NSDecimalNumber单元测试斗争

时间:2015-07-21 19:39:17

标签: objective-c unit-testing nsdecimalnumber

我正在尝试为我的方法编写单元测试,在NSDecimalNumber上执行一些操作。为简单起见,我准备了这个简单的单元测试片段:

- (void) testTmp {
    NSDecimalNumber* val = [NSDecimalNumber decimalNumberWithString:@"0"];
    XCTAssertEqual([val stringValue], @"0");
}

不幸的是它失败了,我无法让它发挥作用。我究竟做错了什么?如何测试NSDecimalNumber的值是否等于其他值?

1 个答案:

答案 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"]);
}

...或(没有检查,NSNumberNSDecimalNumber是否相等,但它应该是这样的... ...

- (void) testTmp {
  NSDecimalNumber* val = [NSDecimalNumber decimalNumberWithString:@"0"];
  XCTAssertEqualObjects(val, @0);
}

但是,NSDecimalNumber的实例是浮点值。比较它们的公平性就是伏都教。