Minitest assert_equal 在应该相等时失败
Minitest assert_equal failing when should be equal
我有一个小型测试,它断言小数点是否相同。想知道为什么会这样
我的断言代码:
assert_equal -9.04, elts[2].change.round(2)
失败:
Failure: LeaveTypePolicyTest#test_case_12
[/usr/src/app/test/models/leave_type_policy_test.rb:1007]
Minitest::Assertion: Expected: -9.04 Actual: -0.904e1
有人经历过吗?也许为什么它失败了?我有很多测试都在做类似的断言,但由于某种原因只有这个失败了。
使用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
最初的测试失败可能是由于比较float
和BigDecimal
或类似的东西造成的。显然,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)
我有一个小型测试,它断言小数点是否相同。想知道为什么会这样
我的断言代码:
assert_equal -9.04, elts[2].change.round(2)
失败:
Failure: LeaveTypePolicyTest#test_case_12 [/usr/src/app/test/models/leave_type_policy_test.rb:1007] Minitest::Assertion: Expected: -9.04 Actual: -0.904e1
有人经历过吗?也许为什么它失败了?我有很多测试都在做类似的断言,但由于某种原因只有这个失败了。
使用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
最初的测试失败可能是由于比较float
和BigDecimal
或类似的东西造成的。显然,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)