用中间Ruby版本测试是否有意义?

时间:2016-11-01 09:38:08

标签: ruby travis-ci ruby-2.0 ruby-2.3.1

如果项目通过了Ruby 2.0.0-p648和Ruby 2.3.1中的测试,那么使用2.1.8和2.2.3等版本进行测试是否有意义?

是否有任何语言功能在Ruby 2.0和Ruby 2.3中有效但在Ruby 2.2中暂时无法正常工作或工作方式不同?

1 个答案:

答案 0 :(得分:1)

您应该针对您打算使用的环境测试您的代码.Ruby语言版本是可以改变的一件事。如果你的代码应该支持它,你也可以考虑对JRuby和Rubinius进行测试 - 例如它是作为公共宝石提供的。

逻辑上,对最早和最新版本的测试应涵盖与语言功能相关的大多数故障情况(尽管不一定是所有语言错误,因为可以引入新的语言错误)。据我所知,还没有在一个版本中故意添加或删除Ruby功能,然后该决定在更高版本中反转。除非:在您的生产代码中,您可能正在检测某个功能的存在,然后完全使用该功能 - 在这种情况下,具有该功能但未处于其最新状态的中间Ruby版本可能会失败。

也可能有其他注意事项,从哲学上讲,当你开始测试时,你想要避免过多的逻辑“这应该有效,因为......”思维。测试的目的是演示你的代码没有以你所覆盖的方式失败(嗯,它的深度比它更深,但如果它进入测试,答案会变得太长哲学)。如果你想声明“适用于从2.0.0到2.3.1的所有Ruby MRI版本”,那么如果你已经对它进行了实际测试,你会感觉更安全。事实上,当在公共场所发表这样的声明时,我通常只会说一些更接近原始事实的东西 - “在版本2.0.0,2.1.4和2.3.1中测试”。

显然收益递减。如果您在2.1.9中没有问题,那么您在2.1.10中就不太可能出现问题 - 在某些时候,检查每个微小变化,甚至只是为了查看测试结果,都会花费更多额外报道。

此问题的常见答案是测试尽可能多的变体,因为您的自动化测试环境可以处理,您可能需要设置和维护。如果您的测试服务提供商并行使用多个版本的Ruby,例如:你正在使用特拉维斯 - 那么测试多个版本相对便宜。因此,您可以尽可能多地了解您希望“在野外”看到的环境变化,因为您可能会费心去看。