【问题标题】: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 的实例是浮点值。比较它们的公平性是巫术。

    【讨论】:

      猜你喜欢
      • 2021-04-30
      • 2021-03-22
      • 1970-01-01
      • 1970-01-01
      • 2021-09-16
      • 1970-01-01
      • 1970-01-01
      • 2015-12-07
      • 2017-06-22
      相关资源
      最近更新 更多