1

我有一个 minitest 测试,它断言小数是否相同。想知道为什么会这样

我的断言代码:

assert_equal -9.04, elts[2].change.round(2)

失败:

失败:LeaveTypePolicyTest#test_case_12 [/usr/src/app/test/models/leave_type_policy_test.rb:1007] Minitest::Assertion:预期:-9.04 实际:-0.904e1

有人经历过吗?也许为什么它失败了?我有很多测试都在做类似的断言,但由于某种原因,只有这个失败了。

4

1 回答 1

2

使用assert_in_delta,例如:

assert_in_delta -9.04, elts[2].change, 0.01

还请参见:Test::Unit::Assertions#assert_in_delta:https ://www.rubydoc.info/github/test-unit/test-unit/Test%2FUnit%2FAssertions:assert_in_delta

例如,这通过:

assert_in_delta 0.33, 1.0/3, 0.01

最初的测试失败可能是由比较或类似floatBigDecimal东西引起的。显然,Ruby 需要这种比较中的类来匹配。这是一个重现类似行为的简单示例:

bar = -9.04                       # Float
baz = BigDecimal.new("-0.904e1")  # BigDecimal (not Float)

puts bar == baz                   # false
puts bar == baz.round(2)          # false (even after rounding!)
puts bar == baz.to_f              # true (converted to Float)
puts bar == baz.to_f.round(2)     # true (same, plus rounded)
于 2020-08-09T16:00:42.823 回答