ruby-on-rails - assert_equal 表示 <0.15> 预期但为 <0.15>,但前提是该方法以某种方式计算 0.15

标签 ruby-on-rails unit-testing testing assert

所以对于这个模型方法:

def tax_rate
  tax_rate = 0.0
  tax_rate += STATE_TAX if state_taxable?  #STATE_TAX = 0.1
  tax_rate += IMPORT_TAX if imported?      #IMPORT_TAX = 0.05
  tax_rate
end

这个测试失败了:

@item.update_attributes({:state_taxable => true,
                         :imported => true,
                         :price => 32.19})
assert_equal 0.15, @item.tax_rate

我收到这个错误:

<0.15> expected but was <0.15>.

但是,这个测试会通过:

@item.update_attributes({:state_taxable => true,
                         :imported => false,
                         :price => 14.99})
assert_equal 0.1, @item.tax_rate

所以当 tax_rate 为 0.0 + 0.1 + 0.05 时我收到错误,但当它为 0.0 + 0.1 或 0.0 + 0.05 时则没有。两个 0.15s 都是 float ,所以我看不出是什么原因造成的。我花了太长时间考虑这个问题,希望有人能指出罪魁祸首是什么。提前谢谢大家。

最佳答案

float 不能精确表示;您需要做的是使用 assert_in_delta 来检查您是否在指定范围内。

类似 assert_in_delta 0.15, @item.tax_rate, 0.001 应该这样做:它会检查您是否在预期值的 0.001 范围内。

关于ruby-on-rails - assert_equal 表示 <0.15> 预期但为 <0.15>,但前提是该方法以某种方式计算 0.15,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3491385/

相关文章:

java - 仅在 testng 中指定测试方法后运行用 AfterMethod 注释的方法

ruby-on-rails - Rails 'Best in Place' Gem - Flash 成功消息?

ruby-on-rails - 如何在迁移脚本中指定整数的大小

c# - 如何使用依赖项的假对象对静态方法进行单元测试?

laravel - 从带有端点的数组生成 PHPUnit 测试

PHPUnit 和测试 CRUD 方法

ruby-on-rails - 添加设备生成的用户表时,Rails 数据库迁移失败并显示 "duplicate column name: email"

ruby-on-rails - Fedora16 gem install nokogiri 失败

angular - 测试 Angular 2 应用程序时如何正确使用 SharedModules 和 Router?

ios - 在 Storyboard 中定义的模拟 UIViewController